home *** CD-ROM | disk | FTP | other *** search
/ Ultimedia 2 / Ultimedia 2.iso / tools / soundtools / protracker / source.lha / pt12e.s < prev    next >
Text File  |  1993-01-05  |  362KB  |  21,029 lines

  1. **********************************************************
  2. *                                                        *
  3. *  Protracker Version 1.2e -                             *
  4. *                                                        *
  5. *  Based on Soundtracker V2.5 / Noisetracker x.x)        *
  6. *  Original Coding by Lars Hamre                         *
  7. *  with some "Resource" help from Anders Hamre           *
  8. *  Thanks to Rune, and a hi there to Sven, Morten,       *
  9. *  Per and Torgeir.                                      *
  10. *                                                        *
  11. *--------------------------------------------------------*
  12.  
  13. ;    bliterase modulo,address,size
  14. bclear:    macro
  15.     move    #$0100,$40(a6)    ;bltcon0
  16.     clr    $42(a6)        ;bltcon1
  17.     clr.l    $44(a6)        ;mask read all
  18.     move    \4,$64(a6)
  19.     move    #\1,$66(a6)    ;destination    mod
  20.     move.l    \2,$54(a6)    ;Destination    D
  21.     move    #\3,$58(a6)
  22.     endm
  23.  
  24.  
  25. _largetext    EQU    1        ;if defined GFX is large text (orig)
  26. pt_version    EQU    '1.2e'
  27.  
  28.  
  29.  
  30.  
  31.  
  32. ; FileFormat
  33. sd_songname    EQU    0
  34. sd_sampleinfo    EQU    20
  35. sd_numofpatt    EQU    950
  36. sd_pattpos    EQU    952
  37. sd_mahokakt    EQU    1080
  38. sd_patterndata    EQU    1084
  39.  
  40. ; audXtemp offsets
  41. n_note        EQU    0  ; W
  42. n_cmd        EQU    2  ; W
  43. n_cmdlo        EQU    3  ; low B of cmd
  44. n_start        EQU    4  ; L
  45. n_length    EQU    8  ; W
  46. n_loopstart    EQU    10 ; L
  47. n_replen    EQU    14 ; W
  48. n_period    EQU    16 ; W
  49. n_finetune    EQU    18 ; B
  50. n_volume    EQU    19 ; B
  51. n_dmabit    EQU    20 ; W
  52. n_toneportdirec    EQU    22 ; B
  53. n_toneportspeed    EQU    23 ; B
  54. n_wantedperiod    EQU    24 ; W
  55. n_vibratocmd    EQU    26 ; B
  56. n_vibratopos    EQU    27 ; B
  57. n_tremolocmd    EQU    28 ; B
  58. n_tremolopos    EQU    29 ; B
  59. n_wavecontrol    EQU    30 ; B
  60. n_glissfunk    EQU    31 ; B
  61. n_sampleoffset    EQU    32 ; B
  62. n_pattpos    EQU    33 ; B
  63. n_loopcount    EQU    34 ; B
  64. n_funkoffset    EQU    35 ; B
  65. n_wavestart    EQU    36 ; L
  66. n_reallength    EQU    40 ; W
  67. n_trigger    EQU    42 ; B
  68. n_samplenum    EQU    43 ; B
  69.  
  70.  
  71. ; Exec Library Offsets
  72. LVOFindTask    EQU    -294
  73. LVOFindName    EQU    -276
  74. LVOForbid    EQU    -132
  75. LVOPermit    EQU    -138
  76. LVOAddPort    EQU    -354
  77. LVORemPort    EQU    -360
  78. LVOWaitPort    EQU    -384
  79. LVOOpenLibrary    EQU    -552
  80. LVOCloseLibrary    EQU    -414
  81. LVOOpenDevice    EQU    -444
  82. LVOCloseDevice    EQU    -450
  83. LVODoIO        EQU    -456
  84. LVOSendIO    EQU    -462
  85. LVOGetMsg    EQU    -372
  86. LVOReplyMsg    EQU    -378
  87. LVOAllocMem    EQU    -198
  88. LVOAllocAbs    EQU    -204
  89. LVOFreeMem    EQU    -210
  90. LVOAvailMem    EQU    -216
  91. LVOAddIntServer    EQU    -168
  92. LVORemIntServer    EQU    -174
  93. LVOOpenResource    EQU    -498
  94. LVOSetFunction    EQU    -420
  95. LVOSetIntVector    EQU    -162
  96. LVORemDevice    EQU    -438
  97.  
  98. ; CIA Resource Offsets
  99. AddICRVector    EQU    -6
  100. RemICRVector    EQU    -12
  101.  
  102. ; DOS Library Offsets
  103. LVOOpen        EQU    -30
  104. LVOClose    EQU    -36
  105. LVORead        EQU    -42
  106. LVOWrite    EQU    -48
  107. LVODeleteFile    EQU    -72
  108. LVORename    EQU    -78
  109. LVOLock        EQU    -84
  110. LVOUnLock    EQU    -90
  111. LVOExamine    EQU    -102
  112. LVOExNext    EQU    -108
  113. LVOInfo        EQU    -114
  114. LVOIoErr    EQU    -132
  115. LVOSeek        EQU    -66
  116. LVOCreateDir    EQU    -120
  117. LVOCurrentDir    EQU    -126
  118. LVODateStamp    EQU    -192
  119. LVODelay    EQU    -198
  120. LVOExecute    EQU    -222
  121. LVOUnLoadSeg    EQU    -156
  122.  
  123. ; Intuition Library Offsets
  124. LVOAutoRequest      EQU    -348
  125. LVOEasyRequest      EQU    -588        ;V37+ function!
  126. LVODisplayAlert   EQU    -90
  127. LVOOpenWorkbench  EQU    -210
  128. LVOCloseWorkbench EQU    -78
  129. LVOWBenchToFront  EQU    -342
  130.  
  131. ; Graphics Library Offsets
  132. LVOBltBitMap    EQU    -30
  133. LVOWaitBlit    EQU    -228
  134. LVOOwnBlitter    EQU    -456
  135. LVODisownBlitter EQU    -462
  136.  
  137.  
  138. ; DateStamp
  139. ofib_DateStamp    EQU    $84
  140. ds_Days        EQU    $00
  141. ds_Minute    EQU    $04
  142. ds_Tick        EQU    $08
  143.  
  144. ; Memory Alloc Flags
  145. MEMF_PUBLIC    EQU    $0001
  146. MEMF_CHIP    EQU    $0002
  147. MEMF_FAST    EQU    $0004
  148. MEMF_CLEAR    EQU    $10000
  149. MEMF_LARGEST    EQU    $20000
  150.  
  151. ; IO Block Offsets
  152. IO_COMMAND    EQU    $1C
  153. IO_FLAGS    EQU    $1E
  154. IO_ACTUAL    EQU    $20
  155. IO_LENGTH    EQU    $24
  156. IO_DATA        EQU    $28
  157. IO_OFFSET    EQU    $2C
  158.  
  159. ; Device Commands 
  160. CMD_READ    EQU    $2
  161. CMD_WRITE    EQU    $3
  162. CMD_UPDATE    EQU    $4
  163. TD_MOTOR    EQU    $9
  164. TD_FORMAT    EQU    $B
  165. TD_CHANGESTATE    EQU    $E
  166. TD_PROTSTATUS    EQU    $F
  167.  
  168. ; Exec Offsets
  169. DeviceList    EQU    350
  170. IDNestCnt    EQU    294
  171.  
  172.  
  173. DirNameLength    EQU    30
  174. ConfigFileSize    EQU    1024
  175. KeyBufSize    EQU    20
  176.  
  177.  
  178. ; Screen Offsets
  179. ScreenWidth    EQU    40
  180. ScreenHeight    EQU    256
  181. ScreenPlanes    EQU    2
  182. PlaneSize    EQU    ScreenWidth*ScreenHeight
  183.  
  184. A_BoxData    EQU    22
  185. T_BoxData    EQU    44
  186. P_BoxData    EQU    66
  187. H_BoxData    EQU    88
  188. C_BoxData    EQU    110
  189.  
  190. ; More Screen Offsets
  191. TopMenusPos    EQU    (ScreenWidth*01)+15
  192. SpectrumAnaPos    EQU    (ScreenWidth*45)+15        ;1815
  193. FormatBoxPos    EQU    (ScreenWidth*52)+10        ;2090
  194. SureBoxPos    EQU    (ScreenWidth*52)+20        ;2100
  195. SamScrPos    EQU    (ScreenWidth*122)        ;4880
  196. VolBoxPos    EQU    (ScreenWidth*155)+9        ;6209
  197. PattBlkSize    EQU    (ScreenWidth*694)
  198.  
  199.  
  200. ; Text Pos Offsets
  201. TempoTextPos    EQU    (ScreenWidth*15)+7
  202. TempoNumPos    EQU    (ScreenWidth*124)+4
  203. TimerNumPos    EQU    (ScreenWidth*103)+34
  204. FreeMemPos    EQU    (ScreenWidth*131)+33
  205. TuneMemPos    EQU    (ScreenWidth*124)+33
  206. ChanNumPos    EQU    (ScreenWidth*61)+2
  207.  
  208. ;Scope Offsets
  209. Scope1Pos    EQU    (ScreenWidth*56)+16
  210. ScopeBox1Pos    EQU    (ScreenWidth*72)+16
  211. ScopeBox2Pos    EQU    (ScreenWidth*72)+22
  212. ScopeBox3Pos    EQU    (ScreenWidth*72)+28
  213. ScopeBox4Pos    EQU    (ScreenWidth*72)+34
  214.  
  215. ;PitchControl Offsets
  216. PitchCtrlYPos    EQU    145
  217. PitchCtrlSize    EQU    97
  218. PitchCtrl0x    EQU    12
  219. PitchCtrl1x    EQU    21
  220. PitchCtrl2x    EQU    30
  221. PitchCtrl3x    EQU    39
  222. PitchCtrl0Pos    EQU    (ScreenWidth*PitchCtrlYPos)+PitchCtrl0x
  223. PitchCtrl1Pos    EQU    (ScreenWidth*PitchCtrlYPos)+PitchCtrl1x
  224. PitchCtrl2Pos    EQU    (ScreenWidth*PitchCtrlYPos)+PitchCtrl2x
  225. PitchCtrl3Pos    EQU    (ScreenWidth*PitchCtrlYPos)+PitchCtrl3x
  226.  
  227. AnaBlkPos    EQU    (ScreenWidth*49)+16
  228.  
  229. PointerYsize    EQU    16
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241. ;**************************************************************************
  242. ; RunBack Hunk for Protracker
  243. ; Written by Lars Hamre/Amiga Freelancers 1990
  244. ; NOTE: This version will not pass arguments or WBMsg to the new Process!
  245.  
  246.     SECTION    ptrunback,CODE
  247.  
  248. rb_HunkStart
  249.     SUB.L    A1,A1
  250.     MOVE.L    4.W,A6
  251.     JSR    -294(A6)    ; FindTask
  252.     MOVE.L    D0,A4
  253.     MOVEQ    #0,D0
  254.     TST.L    $AC(A4)        ; pr_CLI
  255.     BNE.S    rb_FromCLI
  256.     LEA    $5C(A4),A0    ; pr_MsgPort
  257.     JSR    -384(A6)    ; WaitPort
  258.     LEA    $5C(A4),A0
  259.     JSR    -372(A6)    ; GetMsg
  260. rb_FromCLI
  261.     MOVE.L    D0,D7        ; D7 = WBmsg
  262.     LEA    rb_DOSname(PC),A1
  263.     MOVEQ    #0,D0
  264.     JSR    -552(A6)    ; OpenLibrary
  265.     TST.L    D0
  266.     BEQ.S    rb_dexit
  267.     MOVE.L    D0,A5
  268.     EXG    A5,A6        ; A6=DOS
  269.     MOVE.L    $98(A4),D1    ; pr_CurrentDir
  270.     JSR    -96(A6)        ; DupLock
  271.     MOVE.L    D0,rb_CurrentDir
  272.     EXG    A5,A6 ; A6=exec
  273.     JSR    -132(A6) ; Forbid
  274.     MOVE.L    #rb_ProgName,D1
  275.     MOVEQ.L    #0,D2
  276.     MOVE.B    9(A4),D2    ; priority
  277.     LEA    rb_HunkStart-4(PC),A0
  278.     MOVE.L    (A0),D3        ; Ptr to next segment
  279.     CLR.L    (A0)        ; Unlink next segment
  280.     MOVE.L    #4000,D4
  281.     EXG    A5,A6        ; A6=DOS
  282.     JSR    -138(A6)    ; CreateProc
  283.     EXG    A5,A6        ; A6=exec
  284.     JSR    -138(A6)    ; Permit
  285.     MOVE.L    A5,A1
  286.     JSR    -414(A6)    ; CloseLibrary
  287. rb_dexit
  288.     TST.L    D7
  289.     BEQ.S    rb_exit
  290.     JSR    -132(A6)    ; Forbid
  291.     MOVE.L    D7,A1
  292.     JSR    -378(A6)    ; ReplyMsg
  293. rb_exit    MOVEQ    #0,D0
  294.     RTS
  295. rb_DOSname
  296.     dc.b    "dos.library",0
  297. ; End of runback hunk
  298.  
  299.  
  300.  
  301.  
  302. ;******************** CODE HUNK *********************
  303.  
  304.     SECTION ptcode,CODE
  305.  
  306. START    MOVE.L    4.W,A6
  307.     SUB.L    A1,A1
  308.     JSR    LVOFindTask(A6)
  309.     MOVE.L    D0,PTProcess
  310.     BSR.S    Main
  311.     MOVE.L    4.W,A6
  312.     JSR    LVOForbid(A6)
  313.     MOVE.L    DOSBase,A6
  314.     MOVE.L    rb_CurrentDir(PC),D1
  315.     JSR    LVOUnLock(A6)
  316.     LEA    START-4(PC),A0
  317.     MOVE.L    A0,D1
  318.     LSR.L    #2,D1
  319.     JSR    LVOUnLoadSeg(A6)
  320.     MOVEQ    #0,D0
  321.     RTS
  322.  
  323. Main                ;move.l #CopList,$300.w        ;///
  324.     MOVE.L    SP,StackSave
  325.     BSR    OpenLotsOfThings
  326.     BSR    SetVBInt
  327.     BSR    SetSERInt
  328.     BSR    SetMusicInt
  329.     BSR    SetInputHandler
  330.     BSR    SetAutoReq
  331.     BSR    SetEasyReq
  332.     JSR    SetPatternPos
  333.     BSR    SetNormalPtrCol
  334.     BSR    StorePtrCol
  335.     BSR    RedrawToggles
  336.     BSR    DoShowFreeMem
  337.     BSR    SetTempo
  338.     BSR    SetCopList
  339.     BSR    CheckInitError
  340.     LEA    VersionText(PC),A0
  341.     JSR    ShowStatusText
  342.     BSR    RedrawPitchCtrl
  343.  
  344. MainLoop
  345.         BSR    DoKeyBuffer
  346.         BSR    CheckTransKeys
  347.         BSR    CheckCtrlKeys
  348.         BSR    CheckAltKeys
  349.         BSR    CheckKeyboard
  350.         BSR    CheckF1_F2
  351.         BSR    CheckF3_F5
  352.         BSR    CheckF6_F10
  353.         BSR    CheckPlayKeys
  354.         BSR    CheckHelpKey
  355.         BSR    ArrowKeys2
  356.         BSR    ShowTimer
  357.         BSR    ShowFreeMem
  358.         BSR    CheckBlockPos
  359.         JSR    CheckSampleLength
  360.         BSR    CheckRedraw
  361.         JSR    CheckMIDIin
  362.         BSR    CheckSerialByte
  363.         BTST    #6,$BFE001
  364.         BNE.S    MainLoop    ; Loop if not pressed
  365.  
  366.     TST    CurrScreen
  367.     BNE.S    MainSkip
  368.     MOVE    #1,notogfl
  369.     BSR    DisplayMainScreen
  370.     JSR    ShowAllRight
  371.     BSR    WaitForButtonUp
  372.  
  373. ;-------------- if mouse button pressed go here
  374. MainSkip
  375.     BSR    ArrowKeys
  376.     BSR    CheckGadgets
  377.     RTS
  378.  
  379.  
  380.  
  381. notogfl        dc.w 0
  382. PTProcess    dc.l 0
  383. rb_CurrentDir    dc.l 0
  384. rb_ProgName    dc.b 'PT'
  385.         dc.l pt_version,0
  386. VersionText    dc.b 'RELEASE  V'
  387.         dc.l pt_version,0
  388. WBVERTXT        dc.b '$VER: ProTracker_Serial-Link 1.2e (9.1.94)',0
  389.         even
  390.  
  391. CheckInitError
  392.     MOVE.B    InitError,D0
  393.     BEQ    Return1
  394.     BTST    #0,D0
  395.     BEQ.S    cieskp1
  396.     JSR    PLSTMemErr
  397. cieskp1    MOVE.B    InitError,D0
  398.     BTST    #1,D0
  399.     BEQ.S    cieskp2
  400.     JSR    PLSTOpenErr
  401.     JSR    FreePLST
  402. cieskp2    MOVE.B    InitError,D0
  403.     BTST    #2,D0
  404.     BEQ.S    cieskp3
  405.     BSR    ConfigErr
  406. cieskp3    MOVE.B    InitError,D0
  407.     BTST    #3,D0
  408.     BEQ    Return1
  409.     BSR    ConfigErr2
  410.     BSR    SetNormalPtrCol
  411.     BRA    StorePtrCol
  412.  
  413. CheckRedraw
  414.     TST.B    UpdateTempo
  415.     BEQ.S    chkredr
  416.     CLR.B    UpdateTempo
  417.     BSR    SetTempo
  418. chkredr    CMP.L    #'patp',RunMode
  419.     BNE    Return1
  420.     JSR    ShowPosition
  421.     TST.B    PattRfsh
  422.     BEQ    Return1
  423.     MOVE.L    PattRfshNum,PatternNumber
  424.     JMP    RedrawPattern
  425.  
  426.  
  427.  
  428.  
  429. ;---- Cleanup upon exit from PT ----
  430. ExitCleanup
  431.     JSR    StopIt
  432.     SF    EdEnable
  433.     BSR    EscPressed
  434.     BSR    EscPressed
  435.     BSR    ResetSERInt
  436.     BSR    ResetVBInt
  437.     BSR    ResetMusicInt
  438.     BSR    ResetInputHandler
  439.     BSR    ResetAutoReq
  440.     BSR    ResetEasyReq
  441.     BSR    ResetCopList
  442.     JSR    CloseMIDI
  443.     JSR    FreeCopyBuf
  444. errorexit1
  445. errorexit2
  446.     MOVE.L    StackSave,SP
  447.     MOVE.L    4.W,A6
  448.     MOVE.L    GfxBase,A1
  449.     JSR    LVOCloseLibrary(A6)
  450.     MOVE.L    IntuitionBase,A1
  451.     JSR    LVOCloseLibrary(A6)
  452.     MOVE.L    DOSBase,A1
  453.     JSR    LVOCloseLibrary(A6)
  454.  
  455.     MOVE.L    TextBplPtr,D1
  456.     BEQ.S    exex1
  457.     MOVE.L    D1,A1
  458.     MOVE.L    #PattBlkSize,D0
  459.     JSR    LVOFreeMem(A6)
  460. exex1    MOVE.L    SongDataPtr,D1
  461.     BEQ.S    exex2
  462.     MOVE.L    D1,A1
  463.     MOVE.L    #70716,D0
  464.     JSR    LVOFreeMem(A6)
  465. exex2    BSR    FreeDirMem
  466.     BSR    GiveBackInstrMem
  467.     JSR    FreePLST
  468.     JSR    TurnOffVoices
  469.     BCLR    #1,$BFE001
  470.     MOVE.B    LEDStatus,D0
  471.     AND.B    #2,D0
  472.     OR.B    D0,$BFE001            ; Restore LED Status
  473.     MOVEQ    #0,D0
  474. Return1    RTS
  475.  
  476.  
  477. ;---- Open Lots Of Things ----
  478. OpenLotsOfThings
  479.     MOVE.L    #MainScreenData,pic_buf    ;decrunch main screen!
  480.     MOVE.L    #BitPlaneData,bitplane
  481.     JSR    doiff
  482.  
  483.     MOVE.B    $BFE001,LEDStatus
  484.     BSET    #1,$BFE001
  485.     JSR    TurnOffVoices
  486.     MOVE.L    4.W,A6
  487.     LEA    DOSname(PC),A1        ; Open DOS library
  488.     MOVEQ    #0,D0
  489.     JSR    LVOOpenLibrary(A6)
  490.     MOVE.L    D0,DOSBase
  491.     LEA    GraphicsName(PC),A1    ; Open graphics library
  492.     MOVEQ    #0,D0
  493.     JSR    LVOOpenLibrary(A6)
  494.     MOVE.L    D0,GfxBase
  495.     LEA    IntuitionName(PC),A1    ; Open Intuition library
  496.     MOVEQ    #0,D0
  497.     JSR    LVOOpenLibrary(A6)
  498.     MOVE.L    D0,IntuitionBase
  499.     MOVE.l    D0,A6
  500.     MOVE    $14(A6),IntuitionVer
  501.  
  502.     MOVE.L    DOSBase,A6
  503.     MOVE.L    rb_CurrentDir(PC),D1
  504.     JSR    LVOCurrentDir(A6)
  505.  
  506.     MOVE.L    #PattBlkSize,D0        ; Alloc 27k CHIP textbpl
  507.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  508.     MOVE.L    4.W,A6
  509.     JSR    LVOAllocMem(A6)
  510.     MOVE.L    D0,TextBplPtr
  511.     BEQ    errorexit1
  512.     MOVE    D0,NoteBplptrLow    ; set low word
  513.     SWAP    D0
  514.     MOVE    D0,NoteBplptrHigh    ; set high word
  515.  
  516.     MOVE.L    #70716,D0        ; Alloc 70k patternmemory
  517.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  518.     JSR    LVOAllocMem(A6)
  519.     MOVE.L    D0,SongDataPtr
  520.     BEQ    errorexit2
  521.  
  522.     MOVE.L    D0,A0
  523.     LEA    $14(A0),A0
  524.     MOVEQ    #30,D0
  525. alotloop1
  526.     MOVE    #1,$1C(A0)
  527.     LEA    $1E(A0),A0
  528.     DBF    D0,alotloop1
  529.     MOVE.L    SongDataPtr,A0
  530.     MOVE    #$017F,sd_numofpatt(A0)
  531.     MOVE.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  532.  
  533.     MOVEQ    #6,D0
  534.     MOVE.L    D0,CurrSpeed
  535.     MOVE    #1,PEDPos
  536.     MOVE.L    #ModulesPath2,PathPtr
  537.     MOVE.L    #CopList,CopListPtr
  538.     MOVE.L    #CopListBitplanes,CopListBplPtr
  539.     MOVE.L    #CopListColors,CopListColorPtr
  540.     MOVE.L    #CopListBpl4,CopListBpl4Ptr
  541.     MOVE.L    #KbdTransTable2,KeyTransTabPtr
  542.     MOVE.L    #NoteNames1,NoteNamesPtr
  543.     MOVE.L    #VUMeterColors,TheRightColors
  544.  
  545.     MOVE.L    #BitPlaneData,D0 ; Set pointers to bitplane data
  546.     LEA    CopListBitplanes,A1
  547.     MOVE    D0,6(A1)
  548.     SWAP    D0
  549.     MOVE    D0,2(A1)
  550.     SWAP    D0
  551.     ADD.L    #PlaneSize,D0
  552.     MOVE    D0,14(A1)
  553.     SWAP    D0
  554.     MOVE    D0,10(A1)
  555.     BSR    SetDefSpritePtrs
  556.     BSR    UpdateCursorPos
  557.     JSR    RedrawPattern
  558.     JSR    ShowPosition
  559.     JSR    ShowSongLength
  560.     MOVE    #1,InsNum
  561.     JSR    ShowSampleInfo
  562.  
  563.     LEA    BitPlaneData+TopMenusPos,A0
  564.     LEA    TopMenusBuffer,A1
  565.     MOVEQ    #44-1,D0
  566. stmloop    MOVEQ    #25-1,D1
  567. stmloop2
  568.     MOVE.B    (A0)+,(A1)+
  569.     MOVE.B    PlaneSize-1(A0),1099(A1)
  570.     DBF    D1,stmloop2
  571.     LEA    15(A0),A0
  572.     DBF    D0,stmloop
  573.  
  574.     BSR    DoResetAll
  575.     BSR    cfgupda
  576.     BSR    DoLoadConfig
  577.     MOVE.L    #NoteNames1,NoteNamesPtr
  578.     TST.B    Accidental
  579.     BEQ    .skip
  580.     MOVE.L    #NoteNames2,NoteNamesPtr
  581. .skip    JSR    DoLoadPLST
  582. ChangeCopList
  583.     TST    SamScrEnable
  584.     BNE    Return1
  585.     BSR    SetupAnaCols
  586. SetupVUCols
  587.     TST    SamScrEnable
  588.     BNE    Return1
  589.     LEA    CopListMark2,A0        ;VUmeter coloring
  590.     MOVE    #($BA<<8)+7,D5        ;Start position $BA07
  591.     LEA    VUMeterColors,A5
  592.     MOVEQ    #47,D7            ;Change 48 lines
  593. alotlp4    MOVE    D5,(A0)+
  594.     MOVE    #$FFFE,(A0)+
  595.     LEA    VUmeterColRegs(PC),A1
  596.     MOVEQ    #1,D6
  597. alotlp5    MOVE    (A5),D4
  598.     MOVE    (A1)+,(A0)+
  599.     MOVE    #3,FadeX
  600.     MOVE    D4,D0
  601.     BSR    FadeCol
  602.     MOVE    D0,(A0)+
  603.     MOVE    (A1)+,(A0)+
  604.     MOVE    D4,(A0)+
  605.     MOVE    (A1)+,(A0)+
  606.     MOVE    #-3,FadeX
  607.     MOVE    D4,D0
  608.     BSR    FadeCol
  609.     MOVE    D0,(A0)+
  610.     DBF    D6,alotlp5
  611.     ADDQ    #2,A5
  612.     ADD    #$0100,D5    ; Next line...
  613.     DBF    D7,alotlp4
  614.     RTS
  615.  
  616. VUmeterColRegs
  617.     dc.w    $01B2,$01B4,$01B6,$01BA,$01BC,$01BE
  618.  
  619. CopListBpl4Ptr    dc.l    0
  620. CopListPtr    dc.l    0
  621. CopListBplPtr    dc.l    0
  622. CopListColorPtr    dc.l    0
  623. DOSname        dc.b    'dos.library',0
  624. IntuitionName    dc.b    'intuition.library',0
  625. GraphicsName    dc.b    'graphics.library',0,0
  626.  
  627. SetupAnaCols
  628.     LEA    CopListAnalyzer,A5
  629.     MOVE    ColorTable+12,D2
  630.     MOVEQ    #39,D0        ; Change col 40 lines
  631.     MOVE    #$687D,D1    ; Start pos
  632. sacloop    MOVE    D1,(A5)+    ; Set wait
  633.     MOVE    #$FFFE,(A5)+
  634.     MOVE    #$018C,(A5)+    ; Set analyzer color
  635.     ADDQ.L    #2,A5
  636.     ADD    #$0060,D1    ; Move x-pos
  637.     MOVE    D1,(A5)+    ; Wait
  638.     MOVE    #$FFFE,(A5)+
  639.     MOVE    #$018C,(A5)+    ; Set text color
  640.     MOVE    D2,(A5)+
  641.     ADD    #$0100,D1    ; Next line...
  642.     SUB    #$0060,D1
  643.     DBF    D0,sacloop
  644.     TST.B    DisableAnalyzer
  645.     BNE.S    ClearAnalyzerColors
  646. SetAnalyzerColors
  647.     LEA    CopListAnalyzer+6,A1
  648.     LEA    AnalyzerColors,A0
  649.     MOVEQ    #39,D0        ; 40 lines
  650. sanclop    MOVE    (A0)+,(A1)
  651.     LEA    16(A1),A1
  652.     DBF    D0,sanclop
  653.     RTS
  654.  
  655. ClearAnalyzerColors
  656.     LEA    CopListAnalyzer+6,A0
  657.     MOVE    ColorTable+12,D1
  658.     MOVEQ    #39,D0    ; 40 lines.
  659. cacloop    MOVE    D1,(A0)
  660.     LEA    16(A0),A0
  661.     DBF    D0,cacloop
  662.     RTS
  663.  
  664. SetSamSpritePtrs
  665.     MOVE.L    #LoopSpriteData1,Ch1SpritePtr
  666.     MOVE.L    #LoopSpriteData2,Ch2SpritePtr
  667.     MOVE.L    #PlayPosSpriteData,Ch3SpritePtr
  668.     MOVE.L    #NoSpriteData,Ch4SpritePtr
  669.     BRA.S    sdsp2
  670. SetDefSpritePtrs
  671.     MOVE.L    #VUSpriteData1,Ch1SpritePtr
  672.     MOVE.L    #VUSpriteData2,Ch2SpritePtr
  673.     MOVE.L    #VUSpriteData3,Ch3SpritePtr
  674.     MOVE.L    #VUSpriteData4,Ch4SpritePtr
  675. sdsp2    MOVE.L    #CursorSpriteData,CursorPosPtr
  676.     MOVE.L    #PointerSpriteData,PointerSpritePtr
  677.     MOVE.L    #LineCurSpriteData,LineCurPosPtr
  678.     MOVE.L    #NoSpriteData,NoSpritePtr
  679.     MOVE.L    PointerSpritePtr,SpritePtrsPtr
  680.  
  681.     LEA    SpritePtrsPtr,A0    ; Set pointers to spritedata
  682.     LEA    SprList,A1
  683.     MOVEQ    #15,D2
  684. alotloop2
  685.     MOVE    (A0)+,2(A1)
  686.     ADDQ.L    #4,A1
  687.     DBF    D2,alotloop2
  688.     RTS
  689.  
  690. PointerSpritePtr
  691.     dc.l    0
  692.  
  693.  
  694.  
  695. ;---- AutoRequest() ----
  696. SetAutoReq
  697.     MOVE.L    4.W,A6
  698.     JSR    LVOForbid(A6)
  699.     MOVE.L    IntuitionBase,A1
  700.     MOVE.L    #NewAutoRequest,D0
  701.     MOVE.L    #LVOAutoRequest,A0
  702.     JSR    LVOSetFunction(A6)
  703.     MOVE.L    D0,AutoReqSave
  704.     MOVE.L    D0,xyzza+2
  705.     JSR    LVOPermit(A6)
  706.     RTS
  707.  
  708. ResetAutoReq
  709.     MOVE.L    4.W,A6
  710.     MOVE.L    IntuitionBase,A1
  711.     MOVE.L    AutoReqSave(PC),D0
  712.     MOVE.L    #LVOAutoRequest,A0
  713.     JSR    LVOSetFunction(A6)
  714.     RTS
  715.  
  716. NewAutoRequest
  717.     TST    MountFlag
  718.     BNE    PositiveReturn
  719.     BTST.B    #0,AutoReqRunning
  720.     BNE.S    xyzza
  721.         OR.b    #1,AutoReqRunning
  722.         MOVE.L    A0,saveA0
  723.         BSR    ResetCopList
  724.         MOVE.L    saveA0(pc),A0
  725. xyzzy        JSR    $fc00d2
  726.         clr.b    AutoReqRunning
  727.         BRA    SetCopList
  728.  
  729. xyzza    JMP    $fc00d2
  730. AutoReqSave    EQU xyzzy+2
  731. saveA0    dc.l    0
  732.  
  733. ;---- EasyRequest() ----    V37+
  734. SetEasyReq
  735.     CMP    #37,IntuitionVer
  736.     BLT    noeasyreq
  737.         MOVE.L    4.W,A6
  738.         JSR    LVOForbid(A6)
  739.         MOVE.L    IntuitionBase,A1
  740.         MOVE.L    #NewEasyRequest,D0
  741.         MOVE.L    #LVOEasyRequest,A0
  742.         JSR    LVOSetFunction(A6)
  743.         MOVE.L    D0,EasyReqSave+2
  744.         JSR    LVOPermit(A6)
  745. noeasyreq
  746.     RTS
  747.  
  748. ResetEasyReq
  749.     CMP    #37,IntuitionVer
  750.     BLT    noeasyreq
  751.     MOVE.L    4.W,A6
  752.     MOVE.L    IntuitionBase,A1
  753.     MOVE.L    EasyReqSave+2(PC),D0
  754.     MOVE.L    #LVOEasyRequest,A0
  755.     JSR    LVOSetFunction(A6)
  756.     RTS
  757.  
  758. NewEasyRequest
  759.     TST    MountFlag
  760.     BNE    PositiveReturn
  761.     BTST.B    #0,AutoReqRunning
  762.     BNE.S    EasyReqSave
  763.         OR.b    #1,AutoReqRunning
  764.         MOVE.L    A0,saveA0
  765.         BSR    ResetCopList
  766.         MOVE.L    saveA0(pc),A0
  767.         BSR    EasyReqSave        ;goto orig vector
  768.         clr.b    AutoReqRunning
  769.         BRA    SetCopList
  770.  
  771. EasyReqSave    JMP    $fc00d2
  772.  
  773. IntuitionVer    dc.w    0
  774.  
  775. ;---- DisplayAlert() ----
  776.  
  777. SetDispAlert
  778.     MOVE.L    IntuitionBase,A0
  779.     MOVE.L    LVODisplayAlert+2(A0),DispAlertSave
  780.     MOVE.L    #NewDispAlert,LVODisplayAlert+2(A0)
  781.     RTS
  782.  
  783. ResetDispAlert
  784.     MOVE.L    IntuitionBase,A0
  785.     MOVE.L    DispAlertSave,LVODisplayAlert+2(A0)
  786.     RTS
  787.  
  788. NewDispAlert
  789.     MOVEM.L    D0-D7/A0-A6,-(SP)
  790.     LEA    SoftFailText(PC),A1
  791.     ADDQ.L    #3,A0
  792.     MOVEQ    #16,D0
  793. ndaloop    CMP.B    (A1)+,(A0)+
  794.     BNE.S    ndaexit
  795.     DBF    D0,ndaloop
  796.     BSR    FindAdr
  797.     TST.L    D0
  798.     BEQ.S    ndaexit
  799.     MOVE.L    D0,A1
  800.     MOVE.L    SongDataPtr,A0
  801.     MOVE.L    #70716,D0
  802. ndalop2    MOVE.B    (A0)+,D1
  803.     MOVE    D1,$DFF180
  804.     MOVE.B    D1,(A1)+
  805.     SUBQ.L    #1,D0
  806.     BNE.S    ndalop2
  807. ndaexit    MOVEM.L    (SP)+,D0-D7/A0-A6
  808. xyzzy2    JMP    $FC0000
  809.  
  810.  
  811. DispAlertSave EQU xyzzy2+2
  812. SoftFailText    dc.b    "Software Failure :-(",0
  813.         even
  814.  
  815. ;---- Copper List Functions ----
  816. SetCopList
  817.     MOVE.L    GfxBase,A0
  818.     move.l    38(a0),oldcopA
  819.     move.l    50(a0),oldcopB
  820.     MOVE.L    #CopList,$DFF080
  821.     MOVE.L    #CopListB,$DFF084
  822.     move    #0,$dff088
  823.     RTS
  824.  
  825. ResetCopList
  826.     MOVE.L    GfxBase,A0
  827.     MOVE.L    38(A0),$DFF080
  828.     MOVE.L    50(A0),$DFF084
  829.     move    #0,$dff088
  830.     RTS
  831.  
  832. oldcopA    dc.l    0
  833. oldcopB    dc.l    0
  834.  
  835.  
  836.  
  837. ;---- Vertical Blank Interrupt Functions ----
  838.  
  839. SetVBInt
  840.     MOVEQ    #5,D0
  841.     LEA    VBIntServer,A1
  842.     MOVE.L    4.W,A6
  843.     JSR    LVOAddIntServer(A6)
  844.     RTS
  845.  
  846. ResetVBInt
  847.     MOVEQ    #5,D0
  848.     LEA    VBIntServer,A1
  849.     MOVE.L    4.W,A6
  850.     JSR    LVORemIntServer(A6)
  851.     RTS
  852.  
  853. vbint    MOVEM.L    D0-D7/A0-A6,-(SP)
  854.     JSR    SetNewPitchCtrl
  855.     BSR    UpdatePointerPos
  856.     BSR    VUmeters
  857.     BSR    Scope
  858.     BSR    SpecAnaInt
  859.     BSR    ArrowKeys
  860.     BSR    CheckKeyRepeat
  861.     BSR    UpdateTicks
  862.     MOVEM.L    (SP)+,D0-D7/A0-A6
  863.     RTS
  864.  
  865. VBIntServer
  866.     dc.l 0,0
  867.     dc.b 2,0            ; type, priority
  868.     dc.l vbintname
  869.     dc.l 0,vbint
  870.  
  871. vbintname
  872.     dc.b "Protracker_Music_VBlank",0
  873.     even
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880. ;---------------------------- Serial Interrupt Functions -----------    (SPICE)
  881. SetSERInt
  882.     move    #1<<11,$dff09a        ;intena
  883.     MOVEQ    #11,D0
  884.     LEA    SERIntServer,A1
  885.     MOVE.L    4.W,A6
  886.     JSR    LVOSetIntVector(A6)
  887.     move.l    d0,OldSerVector
  888.     bsr    InitSerial
  889.     move    #(1<<11)+$8000,$dff09a
  890.     RTS
  891. OldSerVector
  892.     dc.l    0
  893.  
  894. ;-------------- Set serial baud rate
  895. InitSerial
  896.     move    #(3546895/19200)-1,$dff032
  897. ;    MOVE    #$8801,$DFF09A    ;RBF & TBE on!!
  898.     rts
  899.  
  900.  
  901. ResetSERInt
  902.     move.l    OldSerVector,A1
  903.     cmp.l    #0,A1
  904.     beq.s    .noreset
  905.         move    #1<<11,$dff09a        ;intena
  906.         MOVEQ    #11,D0
  907.         MOVE.L    4.W,A6
  908.         JSR    LVOSetIntVector(A6)
  909.         move    #(1<<11)+$8000,$dff09a
  910. .noreset
  911.     RTS
  912.  
  913.  
  914. ;-------------- Serial interupt handler code
  915. SERIALint
  916.     MOVEM.L    D0-D2/A0-A1,-(SP)
  917.     bsr    GetSerial
  918.     MOVEM.L    (SP)+,D0-D2/A0-A1
  919.     RTS
  920. ;-------------- serial recieve character
  921. SerialByteRec    dc.w    0
  922. GetSerial
  923.     move    $dff018,d0
  924.     MOVE    #$0800,$DFF09C ;intreq
  925.     move    #$00f,$dff180
  926.     move.b    d0,SerialByteRec
  927.     rts
  928.  
  929.  
  930. ; ------------- serial send character
  931. SerialByteL    dc.b    $01
  932. SerialByte    dc.b    $00
  933. SendSerial
  934.     move    #$4000,$dff09a
  935.     move    #$f0f,$dff180
  936.     move    d0,-(sp)
  937.     MOVE    #1,$dff09C    ;clear intreq bit
  938. ;    move    $dff018,d0
  939. ;    btst    #13,d0
  940. ;    beq.s    .s
  941.         move    SerialByteL,$dff030
  942. .s    move    (sp)+,d0
  943.     move    #$c000,$dff09a
  944.     rts
  945.  
  946.  
  947.  
  948.  
  949. ;--------------- check serial byte and act on it
  950. CheckSerialByte
  951.     move.b    SerialByteRec(pc),d0
  952.     clr    SerialByteRec
  953.     cmp.b    #'1',d0
  954.     beq    RecSerialPlay
  955.     cmp.b    #'2',d0
  956.     beq    RecSerialPatt
  957.     cmp.b    #'3',d0
  958.     beq    RecSerialRec
  959.     cmp.b    #'4',d0
  960.     beq    RecSerialStop
  961.  
  962.     tst.b    d0
  963.     beq.s    .novalue
  964.  
  965.     move    #$f00,$dff180
  966.     move    #$4000,d0
  967. .del    nop
  968.     nop
  969.     nop
  970.     dbf    d0,.del
  971.     move    #$0,$dff180
  972.  
  973. .novalue
  974.     rts
  975.  
  976.  
  977.  
  978. RecSerialPlay    jsr    PlaySong
  979.         LEA    SerialPlayText(pc),A0
  980.         JSR    ShowStatusText
  981.         RTS
  982.  
  983. RecSerialPatt    jsr    PlayPattern
  984.         LEA    SerialPattText(pc),A0
  985.         JSR    ShowStatusText
  986.         RTS
  987.  
  988. RecSerialRec    jsr    RecordPattern
  989.         LEA    SerialRecText(pc),A0
  990.         JSR    ShowStatusText
  991.         RTS
  992.  
  993. RecSerialStop    jsr    StopIt
  994.         LEA    SerialStopText(pc),A0
  995.         JSR    ShowStatusText
  996.         RTS
  997.  
  998. ContPlayText    dc.b    'Continue Play..',0
  999. ContPattText    dc.b    'Continue Patt..',0
  1000. ContRecText    dc.b    'Continue Rec...',0
  1001.  
  1002. NormalPlayText    dc.b    'Normal Play....',0
  1003. NormalPattText    dc.b    'Normal Patt....',0
  1004. NormalRecText    dc.b    'Normal Rec.....',0
  1005. NormalEditText    dc.b    'Normal Edit....',0
  1006. NormalStopText    dc.b    'Normal Stop....',0
  1007.  
  1008. SerialPlayText    dc.b    'Serial Play....',0
  1009. SerialPattText    dc.b    'Serial Patt....',0
  1010. SerialRecText    dc.b    'Serial Rec.....',0
  1011. SerialStopText    dc.b    'Serial Stop....',0
  1012.             ;0123456789abcdef
  1013.  
  1014. SERIntServer
  1015.     dc.l 0,0
  1016.     dc.b 2,1            ; type, priority
  1017.     dc.l SERintname
  1018.     dc.l 0,SERIALint
  1019.  
  1020. SERintname
  1021.     dc.b "Protracker_Serial_Interupt",0
  1022.     even
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030. ;---------------------------- Music Interrupt ---------------------
  1031. SetMusicInt
  1032.     TST.B    IntMode
  1033.     BNE.S    SetCIAInt
  1034.     MOVEQ    #5,D0
  1035.     LEA    MusicIntServer,A1
  1036.     MOVE.L    4.W,A6
  1037.     JSR    LVOAddIntServer(A6)
  1038.     RTS
  1039.  
  1040. ResetMusicInt
  1041.     TST.B    IntMode
  1042.     BNE    ResetCIAInt
  1043.     MOVEQ    #5,D0
  1044.     LEA    MusicIntServer,A1
  1045.     MOVE.L    4.W,A6
  1046.     JSR    LVORemIntServer(A6)
  1047.     RTS
  1048.  
  1049. MusicIntServer
  1050.     dc.l 0,0
  1051.     dc.b 2,1            ; type, priority
  1052.     dc.l musintname
  1053.     dc.l 0,IntMusic
  1054.  
  1055. musintname    dc.b "Protracker_Music_CIAInt",0
  1056.         even
  1057. ;---- CIA Interrupt ----
  1058.  
  1059. ciatalo = $400
  1060. ciatahi = $500
  1061. ciatblo = $600
  1062. ciatbhi = $700
  1063. ciacra  = $E00
  1064. ciacrb  = $F00
  1065.  
  1066. SetCIAInt
  1067.     MOVEQ    #2,D6
  1068.     LEA    $BFD000,A5
  1069.     MOVE.B    #'b',CIAAname+3
  1070. SetCIALoop
  1071.     MOVEQ    #0,D0
  1072.     LEA    CIAAname(PC),A1
  1073.     MOVE.L    4.W,A6
  1074.     JSR    LVOOpenResource(A6)
  1075.     MOVE.L    D0,CIAAbase
  1076.     BEQ    Return1
  1077.     MOVE.L    D0,A6
  1078.  
  1079.     MOVE.L    GfxBase,A0
  1080.     MOVE    206(A0),D0    ; DisplayFlags
  1081.     BTST    #2,D0        ; PAL?
  1082.     BEQ.S    WasNTSC
  1083.     MOVE.L    #1773447,D7    ; PAL
  1084.     BRA.S    sciask
  1085. WasNTSC    MOVE.L    #1789773,D7    ; NTSC
  1086. sciask    MOVE.L    D7,TimerValue
  1087.     DIVU    #125,D7        ; Default to normal 50 Hz timer
  1088.  
  1089.     CMP    #2,D6
  1090.     BEQ.S    TryTimerA
  1091. TryTimerB
  1092.     LEA    MusicIntServer(PC),A1
  1093.     MOVEQ    #1,D0    ; Bit 1: Timer B
  1094.     JSR    AddICRVector(A6)
  1095.     MOVE.L    #1,TimerFlag
  1096.     TST.L    D0
  1097.     BNE.S    CIAError
  1098.     MOVE.L    A5,CIAAaddr
  1099.     MOVE.B    D7,ciatblo(A5)
  1100.     LSR    #8,D7
  1101.     MOVE.B    D7,ciatbhi(A5)
  1102.     BSET    #0,ciacrb(A5)
  1103.     BRA    SetTempo
  1104.  
  1105. TryTimerA
  1106.     LEA    MusicIntServer(PC),A1
  1107.     MOVEQ    #0,D0        ; Bit 0: Timer A
  1108.     JSR    AddICRVector(A6)
  1109.     CLR.L    TimerFlag
  1110.     TST.L    D0
  1111.     BNE.S    CIAError
  1112.     MOVE.L    A5,CIAAaddr
  1113.     MOVE.B    D7,ciatalo(A5)
  1114.     LSR    #8,D7
  1115.     MOVE.B    D7,ciatahi(A5)
  1116.     BSET    #0,ciacra(A5)
  1117.     BRA    SetTempo
  1118.  
  1119. CIAError
  1120.     MOVE.B    #'a',CIAAname+3
  1121.     LEA    $BFE001,A5
  1122.     SUBQ    #1,D6
  1123.     BNE    SetCIALoop
  1124.     CLR.L    CIAAbase
  1125.     RTS
  1126.  
  1127. ResetCIAInt
  1128.     MOVE.L    CIAAbase(PC),D0
  1129.     BEQ    Return1
  1130.     CLR.L    CIAAbase
  1131.     MOVE.L    D0,A6
  1132.     MOVE.L    CIAAaddr(PC),A5
  1133.     TST.L    TimerFlag
  1134.     BEQ.S    ResTimerA
  1135.  
  1136.     BCLR    #0,ciacrb(A5)
  1137.     MOVEQ    #1,D0
  1138.     BRA.S    RemInt
  1139.  
  1140. ResTimerA
  1141.     BCLR    #0,ciacra(A5)
  1142.     MOVEQ    #0,D0
  1143. RemInt    LEA    MusicIntServer(PC),A1
  1144.     MOVEQ    #0,d0
  1145.     JSR    RemICRVector(A6)
  1146.     RTS
  1147.  
  1148. CIAAname    dc.b 'ciaa.resource',0
  1149. CIAAbase    dc.l 0
  1150. TimerFlag    dc.l 0
  1151. TimerValue    dc.l 0
  1152.  
  1153. ;---- Tempo ----
  1154.  
  1155. TempoGadg
  1156.     CMP    #60,D0
  1157.     BHS    Return1
  1158.     CMP    #44,D0
  1159.     BHS.S    TemDown
  1160. TemUp    MOVE    RealTempo(PC),D0
  1161.     ADDQ    #1,D0
  1162.     BTST    #2,$DFF016
  1163.     BNE.S    teupsk
  1164.     ADDQ    #8,D0
  1165.     ADDQ    #1,D0
  1166. teupsk    CMP    #255,D0
  1167.     BLS.S    teposk
  1168.     MOVE    #255,D0
  1169. teposk    MOVE    D0,RealTempo
  1170.     BSR    SetTempo
  1171.     JMP    Wait_4000
  1172.  
  1173. TemDown    MOVE    RealTempo(PC),D0
  1174.     SUBQ    #1,D0
  1175.     BTST    #2,$DFF016
  1176.     BNE.S    tednsk
  1177.     SUBQ    #8,D0
  1178.     SUBQ    #1,D0
  1179. tednsk    CMP    #32,D0
  1180.     BHS.S    teposk
  1181.     MOVE    #32,D0
  1182.     BRA.S    teposk
  1183.  
  1184.  
  1185. ChangeTempo
  1186.     CMP    #94,D0
  1187.     BHS.S    TempoDown
  1188.     CMP    #80,D0
  1189.     BHS.S    TempoUp
  1190.     RTS
  1191.  
  1192. TempoUp    MOVE    Tempo,D0
  1193.     ADDQ    #1,D0
  1194.     BTST    #2,$DFF016
  1195.     BNE.S    temupsk
  1196.     ADDQ    #8,D0
  1197.     ADDQ    #1,D0
  1198. temupsk    CMP    #255,D0
  1199.     BLS.S    temposk
  1200.     MOVE    #255,D0
  1201. temposk    MOVE    D0,Tempo
  1202.     MOVE    D0,RealTempo
  1203.     BSR.S    ShowTempo
  1204.     BSR.S    SetTempo
  1205.     JMP    Wait_4000
  1206.  
  1207. TempoDown
  1208.     MOVE    Tempo,D0
  1209.     SUBQ    #1,D0
  1210.     BTST    #2,$DFF016
  1211.     BNE.S    temdnsk
  1212.     SUBQ    #8,D0
  1213.     SUBQ    #1,D0
  1214. temdnsk    CMP    #32,D0
  1215.     BHS.S    temposk
  1216.     MOVE    #32,D0
  1217.     BRA.S    temposk
  1218.  
  1219. ShowTempo
  1220.     MOVE    #TempoTextPos,TextOffset
  1221.     MOVE    RealTempo(PC),WordNumber
  1222.     JMP    Print3DecDigits
  1223.  
  1224. SetTempo
  1225.     MOVEQ    #125,D0
  1226.     MOVE.L    CIAAbase(PC),D1
  1227.     BEQ.S    setesk3
  1228.     MOVE    RealTempo(PC),D0
  1229.     CMP    #32,D0
  1230.     BHS.S    setemsk
  1231.     MOVEQ    #32,D0
  1232. setemsk    MOVE    D0,RealTempo
  1233. setesk3    TST    SamScrEnable
  1234.     BNE.S    setesk2
  1235.     MOVE    #TempoNumPos,TextOffset
  1236.     MOVE    D0,WordNumber
  1237.     JSR    Print3DecDigits
  1238. setesk2    MOVE.L    CIAAbase(PC),D0
  1239.     BEQ    Return1
  1240.     MOVE    RealTempo(PC),D0
  1241.     MOVE.L    TimerValue(PC),D1
  1242.     DIVU    D0,D1
  1243.     MOVE.L    CIAAaddr(PC),A5
  1244.     MOVE.L    TimerFlag(PC),D0
  1245.     BEQ.S    SetTemA
  1246.     MOVE.B    D1,ciatblo(A5)    ;and set the CIA timer
  1247.     LSR    #8,D1
  1248.     MOVE.B    D1,ciatbhi(A5)
  1249.     RTS
  1250.  
  1251. SetTemA    MOVE.B    D1,ciatalo(A5)
  1252.     LSR    #8,D1
  1253.     MOVE.B    D1,ciatahi(A5)
  1254.     RTS
  1255.  
  1256. RealTempo    dc.w 125
  1257. CIAAaddr    dc.l 0
  1258.  
  1259. ;---- Input Event Handler ----
  1260.  
  1261. SetInputHandler
  1262.     MOVE.L    4.W,A6
  1263.     LEA    InpEvPort,A1
  1264.     JSR    LVOAddPort(A6)
  1265.     LEA    InputDevName,A0
  1266.     MOVEQ    #0,D0
  1267.     LEA    InpEvIOReq,A1
  1268.     MOVEQ    #0,D1
  1269.     MOVE.L    #InpEvPort,14(A1)
  1270.     JSR    LVOOpenDevice(A6)
  1271.     LEA    InpEvIOReq,A1
  1272.     MOVE    #9,IO_COMMAND(A1) ; IND_ADDHANDLER
  1273.     MOVE.B    #1,IO_FLAGS(A1)
  1274.     MOVE.L    #InpEvStuff,IO_DATA(A1)
  1275.     JSR    LVOSendIO(A6)
  1276.     RTS
  1277.  
  1278. ResetInputHandler
  1279.     MOVE.L    4.W,A6
  1280.     LEA    InpEvIOReq,A1
  1281.     MOVE    #10,IO_COMMAND(A1) ; IND_REMHANDLER
  1282.     MOVE.B    #1,IO_FLAGS(A1)
  1283.     MOVE.L    #InpEvStuff,IO_DATA(A1)
  1284.     JSR    LVOSendIO(A6)
  1285.     LEA    InpEvIOReq,A1
  1286.     JSR    LVOCloseDevice(A6)
  1287.     LEA    InpEvPort,A1
  1288.     JSR    LVORemPort(A6)
  1289.     RTS
  1290.  
  1291.  
  1292. InpEvStuff
  1293.     dc.l    0,0
  1294.     dc.b    2,52 ; type, priority
  1295.     dc.l    inpevname
  1296.     dc.l    0,InputHandler
  1297.  
  1298. inpevname
  1299.     dc.b "Protracker_InputHandler",0
  1300.     even
  1301.  
  1302. ;--------------------------------------
  1303. ; A0-InputEvent, A1-Data Area
  1304. ;
  1305. InputHandler
  1306.     MOVEM.L    D1/A0-A3,-(SP)
  1307.     TST.B    AutoReqRunning
  1308.     BNE.S    inphend
  1309.     SUB.L    A2,A2
  1310.     MOVE.L    A0,A1
  1311.     MOVE.B    4(A1),D0 ; ie_Class
  1312.     CMP.B    #1,D0    ; RAWKEY
  1313.     BEQ.S    InpRawkey
  1314.     CMP.B    #2,D0    ; RAWMOUSE
  1315.     BEQ.S    InpRawmouse
  1316.     MOVE.L    A1,A2
  1317. InpNext    MOVE.L    (A1),A1
  1318.     MOVE.L    A1,D0
  1319.     BNE.S    InputHandler
  1320. inphend    MOVE.L    A0,D0
  1321.     MOVEM.L    (SP)+,D1/A0-A3
  1322.     RTS
  1323.  
  1324. InpRawkey
  1325.     BSR    InpUnchain
  1326.     MOVE    6(A1),D0
  1327.     BSR    ProcessRawkey
  1328.     BRA    InpNext
  1329.  
  1330. InpRawmouse
  1331.     BSR    InpUnchain
  1332.     MOVE    MouseX3,D0
  1333.     MOVE    MouseY3,D1
  1334.     ADD    10(A1),D0
  1335.     ADD    12(A1),D1
  1336.     TST    D0
  1337.     BPL.S    irskip1
  1338.     MOVEQ    #0,D0
  1339. irskip1    TST    D1
  1340.     BPL.S    irskip2
  1341.     MOVEQ    #0,D1
  1342. irskip2    CMP    #320,D0
  1343.     BLO.S    irskip3
  1344.     MOVE    #320-1,D0
  1345. irskip3    CMP    #256,D1
  1346.     BLO.S    irskip4
  1347.     MOVE    #256-1,D1
  1348. irskip4    MOVE    D0,MouseX3
  1349.     MOVE    D1,MouseY3
  1350. ;    LSR    #1,D0            ;moves faster without this
  1351. ;    LSR    #1,D1
  1352.     MOVE    D0,MouseX
  1353.     MOVE    D1,MouseY
  1354.     BRA.S    InpNext
  1355.  
  1356. InpUnchain
  1357.     MOVE.L    A2,D0
  1358.     BNE.S    InpUnc2
  1359.     MOVE.L    (A1),A0
  1360.     RTS
  1361. InpUnc2    MOVE.L    (A1),(A2)
  1362.     RTS
  1363.  
  1364.  
  1365.  
  1366. ;---- Process rawkey code from the keyboard ----
  1367. ProcessRawkey
  1368.     CMP.B    LastRawkey,D0
  1369.     BEQ    Return1
  1370.     MOVE.B    D0,LastRawkey
  1371.     CMP.B    #67+128,D0
  1372.     BEQ    LowerInstr2
  1373.     CMP.B    #96,D0
  1374.     BEQ    ShiftOn
  1375.     CMP.B    #97,D0
  1376.     BEQ    ShiftOn2
  1377.     CMP.B    #100,D0
  1378.     BEQ    AltOn
  1379.     CMP.B    #101,D0
  1380.     BEQ    AltOn2
  1381.     CMP.B    #99,D0
  1382.     BEQ    CtrlOn
  1383.     CMP.B    #102,D0
  1384.     BEQ    LeftAmigaOn
  1385.     CMP.B    #99+128,D0
  1386.     BEQ    CtrlOff
  1387.     CMP.B    #100+128,D0
  1388.     BEQ    AltOff
  1389.     CMP.B    #96+128,D0
  1390.     BEQ.S    ShiftOff
  1391.     CMP.B    #101+128,D0
  1392.     BEQ    AltOff
  1393.     CMP.B    #97+128,D0
  1394.     BEQ.S    ShiftOff
  1395.     CMP.B    #102+128,D0
  1396.     BEQ    LeftAmigaOff
  1397.     CMP.B    #98,D0
  1398.     BEQ.S    KeyRepOn
  1399.     CMP.B    #98+128,D0
  1400.     BEQ.S    KeyRepOff
  1401. kbintSetKey
  1402.     TST.B    D0
  1403.     BNE.S    kbintDoSet
  1404.     MOVE.B    #127,D0
  1405. kbintDoSet
  1406.     MOVE    KeyBufPos(PC),D1
  1407.     CMP    #KeyBufSize,D1
  1408.     BHS    Return1
  1409.     LEA    KeyBuffer(PC),A3
  1410.     MOVE.B    D0,(A3,D1.W)
  1411.     ADDQ    #1,KeyBufPos
  1412.     RTS
  1413.  
  1414. LowerInstr2
  1415.     CLR    HiLowInstr
  1416.     BRA.S    kbintSetKey
  1417.  
  1418. KeyRepOn
  1419.     ST    KeyRepeat
  1420.     RTS
  1421.  
  1422. KeyRepOff
  1423.     SF    KeyRepeat
  1424.     RTS
  1425.  
  1426. ShiftOn    MOVE    #1,ShiftKeyStatus
  1427.     RTS
  1428.  
  1429. ShiftOn2
  1430.     MOVE    #1,ShiftKeyStatus
  1431.     BRA.S    kbintSetKey
  1432.  
  1433. ShiftOff
  1434.     CLR    ShiftKeyStatus
  1435.     RTS
  1436.  
  1437. AltOn    MOVE    #1,AltKeyStatus
  1438.     RTS
  1439.  
  1440. AltOn2    MOVE    #1,AltKeyStatus
  1441.     BRA.S    kbintSetKey
  1442.  
  1443. AltOff    CLR    AltKeyStatus
  1444.     RTS
  1445.  
  1446. CtrlOn    MOVE    #1,CtrlKeyStatus
  1447.     RTS
  1448.  
  1449. CtrlOff    CLR    CtrlKeyStatus
  1450.     RTS
  1451.  
  1452. LeftAmigaOn
  1453.     MOVE    #1,LeftAmigaStatus
  1454.     RTS
  1455.  
  1456. LeftAmigaOff
  1457.     CLR    LeftAmigaStatus
  1458.     RTS
  1459.  
  1460. DoKeyBuffer
  1461.     MOVE    KeyBufPos(PC),D0
  1462.     BEQ    Return1
  1463.     SUBQ    #1,D0
  1464.     LEA    KeyBuffer(PC),A0
  1465.     MOVE.B    (A0,D0.W),D1
  1466.     MOVE    D0,KeyBufPos
  1467.     MOVE.B    D1,RawKeyCode
  1468.     MOVE.B    D1,SaveKey
  1469.     MOVE    KeyRepDelay,KeyRepCounter
  1470.     BTST    #7,D1
  1471.     BEQ.S    dkbend
  1472.     CLR    KeyRepCounter
  1473. dkbend    RTS
  1474.  
  1475. KeyBufPos    dc.w    0
  1476. KeyBuffer    dcb.b    KeyBufSize,0
  1477. ShiftKeyStatus    dc.w    0
  1478. AltKeyStatus    dc.w    0
  1479. CtrlKeyStatus    dc.w    0
  1480. LeftAmigaStatus    dc.w    0
  1481. LastRawkey    dc.b    255,0
  1482. SaveKey        dc.b    0
  1483. KeyRepeat    dc.b    0
  1484. KeyRepCounter    dc.w    0
  1485.  
  1486. ;---- Key repeat ----
  1487.  
  1488. CheckKeyRepeat
  1489.     TST.B    KeyRepeat
  1490.     BEQ    Return1
  1491.     MOVE    KeyRepCounter(PC),D0
  1492.     BEQ    Return1
  1493.     SUBQ    #1,D0
  1494.     BEQ.S    RepDown
  1495.     MOVE    D0,KeyRepCounter
  1496.     RTS
  1497.  
  1498. RepDown    MOVE.B    SaveKey(PC),RawKeyCode
  1499.     MOVE    KeyRepSpeed,KeyRepCounter
  1500.     RTS
  1501.  
  1502. ;---- Update Mousepointer Position ----
  1503.  
  1504. UpdatePointerPos
  1505.     MOVE    MouseX,D0
  1506.     ADDQ    #3,D0
  1507.     MOVE    MouseY,D1
  1508.     MOVEQ    #PointerYsize,D2
  1509.     MOVE.L    PointerSpritePtr,A0
  1510.     JMP    SetSpritePos
  1511.  
  1512. ;---- Timer ----
  1513.  
  1514. UpdateTicks
  1515.     CMP.L    #'patp',RunMode
  1516.     BNE    Return1
  1517.     ADDQ    #1,PatternTicks
  1518.     MOVE    PatternTicks(PC),D0
  1519.     MOVE.L    4.W,A0
  1520.     CMP.B    $212(A0),D0
  1521.     BNE    Return1
  1522.     CLR    PatternTicks
  1523.     ADDQ.L    #1,TimerTicks
  1524.     RTS
  1525.  
  1526. ShowTimer
  1527.     CMP    #4,CurrScreen
  1528.     BEQ    Return1
  1529.     MOVE.L    TimerTicks(PC),D0
  1530.     DIVU    #60,D0
  1531.     MOVE    D0,WordNumber
  1532.     SWAP    D0
  1533.     MOVE    D0,D7
  1534.     MOVE    #TimerNumPos,TextOffset
  1535.     JSR    Print2DecDigits
  1536.     MOVE    D7,WordNumber
  1537.     ADDQ    #1,TextOffset
  1538.     JMP    Print2DecDigits
  1539.  
  1540. PatternTicks    dc.w    0
  1541. TimerTicks    dc.l    0
  1542.  
  1543. ;---- Spectrum Analyzer ----
  1544.  
  1545. SpecAnaInt
  1546.     CMP    #1,CurrScreen
  1547.     BNE    Return1
  1548.     TST.B    DisableAnalyzer
  1549.     BNE    Return1
  1550. .loop    TST.B    AnaDrawFlag
  1551.     BNE    Return1
  1552.     ST    AnaDrawFlag
  1553.     MOVEQ    #40,D5
  1554.     MOVEQ    #126,D6
  1555.     LEA    AnalyzerHeights,A0
  1556.     LEA    AnalyzerOpplegg,A1
  1557.     LEA    AnalyzerOffsets(PC),A2
  1558.     MOVE.L    TextBplPtr,A3
  1559.     LEA    AnaBlkPos(A3),A3
  1560.     MOVEQ    #$16,D7
  1561. spanlab1
  1562.     MOVE    (A0)+,D0
  1563.     CMP    #36,D0
  1564.     BLO.S    spanskip2
  1565.     MOVE    #36,D0
  1566. spanskip2
  1567.     MOVE    (A1)+,D1
  1568.     CMP    D0,D1
  1569.     BEQ.S    spanskip3
  1570.     BLO.S    span_r2
  1571.     SUB    D0,D1
  1572.     SUBQ    #1,D1
  1573.     ADD    D0,D0
  1574.     MOVE    (A2,D0.W),D0
  1575. spanloop
  1576.     CLR.B    (A3,D0.W)
  1577.     SUB    D5,D0
  1578.     DBF    D1,spanloop
  1579.     BRA.S    spanskip3
  1580.  
  1581. span_r2    SUB    D1,D0
  1582.     SUBQ    #1,D0
  1583.     LSL    #1,D1
  1584.     MOVE    0(A2,D1.W),D1
  1585. spanloop2
  1586.     MOVE.B    D6,0(A3,D1.W)
  1587.     SUB    D5,D1
  1588.     DBF    D0,spanloop2
  1589. spanskip3
  1590.     ADDQ.L    #1,A3
  1591.     DBF    D7,spanlab1
  1592.     LEA    AnalyzerHeights,A0
  1593.     LEA    AnalyzerOpplegg,A1
  1594.     MOVEQ    #22,D7
  1595. spanloop3
  1596.     MOVE    (A0),D0
  1597.     MOVE    D0,(A1)+
  1598.     BEQ.S    spanskip4
  1599.     SUBQ    #1,D0
  1600. spanskip4
  1601.     MOVE    D0,(A0)+
  1602.     DBF    D7,spanloop3
  1603.     SF    AnaDrawFlag
  1604.     RTS
  1605.  
  1606. ClearAnaHeights
  1607.     LEA    AnalyzerOpplegg,A0
  1608.     LEA    AnalyzerHeights,A1
  1609.     MOVEQ    #22,D7
  1610.     MOVEQ    #0,D0
  1611. cahloop    MOVE    D0,(A0)+
  1612.     MOVE    D0,(A1)+
  1613.     DBF    D7,cahloop
  1614.     RTS
  1615.  
  1616. PlayNoteAnalyze        ; Called by keyboard play
  1617.     MOVEM.L    D0-D3/A0,-(SP)
  1618.     MOVEQ    #0,D2
  1619.     MOVE    2(A6),D2
  1620.     BRA.S    SpecAna2
  1621.  
  1622. SpectrumAnalyzer    ; Called by playroutine
  1623.     TST    (A4)
  1624.     BEQ    Return1
  1625.     MOVEM.L    D0-D3/A0,-(SP)
  1626.     MOVEQ    #0,D2
  1627.     MOVE.B    n_volume(A6),D2    ; Get channel volume
  1628. SpecAna2
  1629.     TST.B    AnaDrawFlag
  1630.     BNE    ohno
  1631.     ST    AnaDrawFlag
  1632.     BSR    SetAnalyzerVolumes
  1633.     BEQ.S    saend
  1634.     LSL    #8,D2
  1635.     DIVU    #682,D2
  1636.     MOVE    D2,D3
  1637.     LSR    #1,D3
  1638.     LEA    AnalyzerHeights,A0
  1639.     SUB    #113,D0    ; Subtract 113 (highest rate)
  1640.     MOVE    #743,D1
  1641.     SUB    D0,D1    ; Invert range 0-743
  1642.     MULU    D1,D1    ; 0 - 743^2
  1643.     DIVU    #25093,D1
  1644.     MOVE    D1,D0
  1645.     CMP    #46,D0
  1646.     BLO.S    saskip
  1647.     MOVEQ    #45,D0
  1648. saskip    LSL    #1,D0
  1649.     ADD    D2,(A0,D0.W)
  1650.     CMP    #36,(A0,D0.W)
  1651.     BLO.S    saskip2
  1652.     MOVE    #36,(A0,D0.W)
  1653. saskip2    TST    D0
  1654.     BEQ.S    saskip3
  1655.     ADD    D3,-2(A0,D0.W)
  1656.     CMP    #36,-2(A0,D0.W)
  1657.     BLO.S    saskip3
  1658.     MOVE    #36,-2(A0,D0.W)
  1659. saskip3    CMP    #44,D0
  1660.     BEQ.S    saend
  1661.     ADD    D3,2(A0,D0.W)
  1662.     CMP    #36,2(A0,D0.W)
  1663.     BLO.S    saend
  1664.     MOVE    #36,2(A0,D0.W)
  1665. saend    SF    AnaDrawFlag
  1666. ohno    MOVEM.L    (SP)+,D0-D3/A0
  1667.     RTS
  1668.  
  1669. AnalyzerOffsets
  1670.     dc.w $0730,$0708,$06E0,$06B8,$0690,$0668,$0640,$0618
  1671.     dc.w $05F0,$05C8,$05A0,$0578,$0550,$0528,$0500,$04D8
  1672.     dc.w $04B0,$0488,$0460,$0438,$0410,$03E8,$03C0,$0398
  1673.     dc.w $0370,$0348,$0320,$02F8,$02D0,$02A8,$0280,$0258
  1674.     dc.w $0230,$0208,$01E0,$01B8,$0190,$0168,$0140,$0118
  1675.     dc.w $00F0
  1676.  
  1677. AnaDrawFlag    dc.b 0,0
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685. ;---------------------------- Scope --------------------------------
  1686.  
  1687. ns_sampleptr =  0
  1688. ns_endptr    =  4
  1689. ns_repeatptr =  8
  1690. ns_rependptr = 12
  1691. ns_period    = 16
  1692. ns_volume    = 18
  1693.  
  1694. Scope    LEA    audchan1temp,A0
  1695.     LEA    ScopeInfo,A2
  1696.     LEA    ScopeSamInfo,A1
  1697.     LEA    BlankSample,A3
  1698.     LEA    PitchCtrl,a4
  1699.     MOVEQ    #3,D6
  1700. ScoLoop    MOVE    (A0),D0
  1701.     AND    #$0FFF,D0
  1702.     OR    n_period(A0),D0
  1703.     BEQ    ScoSampleEnd ; end if no note & no period
  1704.  
  1705.     move    (a4)+,d0            ;PITCH
  1706.     sub    #PitchCtrlSize>>1,d0
  1707.     add    d0,d0                ;scale pitch_ctrl range
  1708.     MOVE    n_period(A0),ns_period(A2)
  1709.     add    d0,ns_period(A2)        ;PITCH
  1710.  
  1711.     MOVE.B    n_volume(A0),ns_volume(A2)
  1712.  
  1713.     TST.B    n_trigger(A0)
  1714.     BEQ    ScoContinue
  1715. ScoRetrig
  1716.     SF    n_trigger(A0)
  1717.     BSR    SetScope
  1718.     MOVEQ    #0,D0
  1719.     MOVE.B    n_samplenum(A0),D0
  1720.     SUBQ    #1,D0
  1721.     LSL    #4,D0
  1722.     MOVE.L    ns_sampleptr(A1,D0.W),ns_sampleptr(A2)
  1723.     MOVE.L    ns_endptr(A1,D0.W),ns_endptr(A2)
  1724.     MOVE.L    ns_repeatptr(A1,D0.W),ns_repeatptr(A2)
  1725.     MOVE.L    ns_rependptr(A1,D0.W),ns_rependptr(A2)
  1726.     MOVE.L    ns_sampleptr(A2),D0
  1727.     CMP.L    A3,D0 ; at end of sample...
  1728.     BEQ.S    ScoNextChan
  1729.     BRA    ScoChk
  1730. ScoContinue
  1731.     MOVE.L    ns_sampleptr(A2),D0
  1732.     CMP.L    A3,D0 ; at end of sample...
  1733.     BEQ.S    ScoNextChan
  1734.     MOVEQ    #0,D1
  1735.     MOVE    ns_period(A2),D1
  1736.     LSR    #1,D1
  1737.     BEQ.S    ScoNextChan
  1738.     MOVE.L    #35469,D2
  1739.     DIVU    D1,D2
  1740.     EXT.L    D2
  1741.     ADD.L    D2,D0
  1742. ScoChk    CMP.L    ns_endptr(A2),D0
  1743.     BLO.S    ScoUpdatePtr
  1744.     TST.L    ns_repeatptr(A2)
  1745.     BNE.S    ScoSamLoop
  1746. ScoSampleEnd
  1747.     MOVE.L    A3,D0
  1748.     BRA.S    ScoUpdatePtr
  1749.  
  1750. ScoSamLoop
  1751.     SUB.L    ns_endptr(A2),D0
  1752.     ADD.L    ns_repeatptr(A2),D0
  1753.     MOVE.L    ns_rependptr(A2),ns_endptr(A2)
  1754.     CMP.L    ns_endptr(A2),D0
  1755.     BHS    ScoSamLoop
  1756. ScoUpdatePtr
  1757.     MOVE.L    D0,ns_sampleptr(A2)
  1758. ScoNextChan
  1759.     LEA    20(A2),A2            ;ADD.L    #20,A2
  1760.     LEA    44(A0),A0            ;ADD.L    #44,A0
  1761.     DBF    D6,ScoLoop
  1762.  
  1763. ; now draw channels
  1764.     TST.B    ScopeEnable
  1765.     BEQ.S    clsnot
  1766.     CMP    #1,CurrScreen
  1767.     BNE.S    clsnot
  1768.     TST.B    EdEnable
  1769.     BNE.S    clsnot
  1770.  
  1771.     MOVE.L    TextBplPtr,A0
  1772.     ADD.L    #Scope1Pos,A0
  1773.     MOVEQ    #0,D0
  1774.     MOVEQ    #32,D1
  1775. clscop1                    ;MOVEQ    #5,D2
  1776.     MOVE.L    D0,(A0)+
  1777.     MOVE.L    D0,(A0)+
  1778.     MOVE.L    D0,(A0)+
  1779.     MOVE.L    D0,(A0)+
  1780.     MOVE.L    D0,(A0)+
  1781.     MOVE.L    D0,(A0)+
  1782.                     ;DBF    D2,clscop2
  1783.     LEA    16(A0),A0
  1784.     DBF    D1,clscop1
  1785.  
  1786. clsnot    MOVEQ    #-1,D4
  1787.     TST    SamScrEnable
  1788.     BEQ.S    ScoNClr
  1789.     MOVEQ    #0,D4
  1790. ScoNClr    MOVEQ    #0,D7
  1791.     MOVE    $DFF002,D6 ; dmaconr
  1792.     MOVEQ    #0,D5
  1793.     MOVE.L    #ScopeBox1Pos,A1
  1794.     LEA    xBlankSample,A2
  1795.     BTST    #0,D6
  1796.     BEQ.S    ScoSkp1
  1797.     LEA    ScopeInfo,A2
  1798.     MOVE.B    ns_volume(A2),D5
  1799. ScoSkp1    BSR.S    ScoDraw
  1800.  
  1801.     MOVEQ    #0,D5
  1802.     MOVE.L    #ScopeBox2Pos,A1
  1803.     LEA    xBlankSample,A2
  1804.     BTST    #1,D6
  1805.     BEQ.S    ScoSkp2
  1806.     LEA    ScopeInfo+20,A2
  1807.     MOVE.B    ns_volume(A2),D5
  1808. ScoSkp2    BSR.S    ScoDraw
  1809.  
  1810.     MOVEQ    #0,D5
  1811.     MOVE.L    #ScopeBox3Pos,A1
  1812.     LEA    xBlankSample,A2
  1813.     BTST    #2,D6
  1814.     BEQ.S    ScoSkp3
  1815.     LEA    ScopeInfo+40,A2
  1816.     MOVE.B    ns_volume(A2),D5
  1817. ScoSkp3    BSR.S    ScoDraw
  1818.  
  1819.     MOVEQ    #0,D5
  1820.     MOVE.L    #ScopeBox4Pos,A1
  1821.     LEA    xBlankSample,A2
  1822.     BTST    #3,D6
  1823.     BEQ.S    ScoSkp4
  1824.     LEA    ScopeInfo+60,A2
  1825.     MOVE.B    ns_volume(A2),D5
  1826. ScoSkp4    BSR    ScoDraw
  1827.     TST.L    D7
  1828.     BEQ    sdloscr
  1829. Scorts    RTS
  1830.  
  1831.  
  1832. ScoDraw    TST.B    ScopeEnable
  1833.     BEQ.S    sdlpos
  1834.     CMP    #1,CurrScreen
  1835.     BNE.S    sdlpos
  1836.     TST.B    EdEnable
  1837.     BNE.S    sdlpos
  1838.     LSR    #1,D5
  1839.     CMP    #32,D5
  1840.     BLS.S    sdsk1
  1841.     MOVEQ    #32,D5
  1842. sdsk1    MOVE.L    (A2),A0
  1843.     ADD.L    TextBplPtr,A1
  1844.     MOVEQ    #4,D2
  1845. sdlp1    MOVEQ    #7,D3
  1846. sdlp2    MOVE.B    (A0)+,D0    ; get byte
  1847.     EXT    D0        ; extend to word
  1848.     NEG    D0        ; negate
  1849.     MULS    D5,D0        ; multiply by volume
  1850.     ASR    #8,D0        ; shift down
  1851.     MOVE    D0,D1
  1852.     ASL    #5,D0        ; * 32
  1853.     ASL    #3,D1        ; * 8
  1854.     ADD    D1,D0        ; (32+8) = * 40
  1855.     BSET    D3,(A1,D0.W)    ; set a bit
  1856.     DBF    D3,sdlp2
  1857.     ADDQ.L    #1,A1        ; yes
  1858. sdlskip    DBF    D2,sdlp1
  1859.  
  1860. sdlpos    TST.B    D4
  1861.     BNE.S    Scorts
  1862.     LEA    xBlankSample(PC),A0
  1863.     CMP.L    A0,A2
  1864.     BEQ.S    sdloscr
  1865.     MOVE.L    (A2),D1
  1866.     MOVE.L    SamDrawStart(PC),D0
  1867.     CMP.L    D0,D1
  1868.     BLS.S    Scorts
  1869.     CMP.L    SamDrawEnd(PC),D1
  1870.     BHS.S    Scorts
  1871.     SUB.L    D0,D1
  1872.     MULU    #314,D1
  1873.     MOVE.L    SamDisplay,D0
  1874.     BEQ.S    Scorts
  1875.     DIVU    D0,D1
  1876.     ST    D4
  1877.     ST    D7
  1878.     MOVE.L    D1,D0
  1879.     ADDQ    #6,D0
  1880.     MOVE    #139,D1
  1881. sdlpspr    MOVEQ    #64,D2
  1882.     LEA    PlayPosSpriteData,A0
  1883.     JMP    SetSpritePos
  1884.  
  1885. sdloscr    MOVEQ    #0,D0
  1886.     MOVE    #270,D1
  1887.     BRA.S    sdlpspr
  1888.  
  1889. SetScope
  1890.     MOVEQ    #0,D1
  1891.     MOVE.B    n_samplenum(A0),D1
  1892.     SUBQ    #1,D1
  1893.     LSL    #4,D1
  1894.     LEA    ScopeSamInfo,A4
  1895.     LEA    (A4,D1.W),A4
  1896.  
  1897.     MOVE.L    n_start(A0),D0
  1898.     MOVE.L    D0,ns_sampleptr(A4)
  1899.     MOVEQ    #0,D1
  1900.     MOVE    n_length(A0),D1
  1901.     ADD.L    D1,D0
  1902.     ADD.L    D1,D0
  1903.     MOVE.L    D0,ns_endptr(A4)
  1904.  
  1905.     MOVE.L    n_loopstart(A0),D0
  1906.     MOVE.L    D0,ns_repeatptr(A4)
  1907.     MOVEQ    #0,D1
  1908.     MOVE    n_replen(A0),D1
  1909.     CMP    #1,D1
  1910.     BEQ.S    sconorep
  1911.     ADD.L    D1,D0
  1912.     ADD.L    D1,D0
  1913.     MOVE.L    D0,ns_rependptr(A4)
  1914.     BRA    Return1
  1915. sconorep
  1916.     CLR.L    ns_repeatptr(A4)
  1917.     RTS
  1918.  
  1919. ToggleAnaScope
  1920.     TST    notogfl
  1921.     BNE    Return1
  1922.     BSR    WaitForButtonUp
  1923.     MOVEQ    #0,D4
  1924.     TST.B    AnaScopFlag
  1925.     BNE.S    tasana
  1926.     ST    AnaScopFlag
  1927.     BRA    RedrawAnaScope
  1928. tasana    SF    AnaScopFlag
  1929.     BRA    RedrawAnaScope
  1930.  
  1931. ScopeEnable    dc.b 0
  1932. AnaScopFlag    dc.b 1
  1933. xBlankSample    dc.l BlankSample
  1934. SamDrawStart    dc.l 0
  1935. SamDrawEnd    dc.l 0
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942. ;---- Show Free/Tune Memory ----
  1943. DoShowFreeMem
  1944.     MOVE    #1,UpdateFreeMem
  1945. ShowFreeMem
  1946.     MOVEM.L    D0-D7/A0-A6,-(SP)
  1947.     TST    UpdateFreeMem
  1948.     BEQ.S    sfmskp
  1949.     CLR    UpdateFreeMem
  1950.     CLR.L    FreeMemory
  1951.     CLR.L    TuneMemory
  1952. sfmskp    BSR    ShowTuneMem
  1953.     MOVEQ    #MEMF_CHIP,D1
  1954.     TST.B    ShowPublicFlag
  1955.     BEQ    sfmskp2
  1956.     MOVEQ    #MEMF_PUBLIC,D1
  1957. sfmskp2    MOVE.L    4.W,A6
  1958.     JSR    LVOAvailMem(A6)
  1959.     CMP.L    FreeMemory(PC),D0
  1960.     BEQ.S    fremend
  1961.     MOVE.L    D0,FreeMemory
  1962.     TST.B    ShowDecFlag
  1963.     BNE.S    shfrdec
  1964.     MOVE.L    D0,D6
  1965.     MOVE    #FreeMemPos,TextOffset
  1966.     SWAP    D0
  1967.     AND    #$FF,D0
  1968.     MOVE    D0,WordNumber
  1969.     JSR    PrintHexByte
  1970.     MOVE    D6,WordNumber
  1971.     JSR    PrintHexWord
  1972. fremend    MOVEM.L    (SP)+,D0-D7/A0-A6
  1973.     RTS
  1974.  
  1975. shfrdec    MOVE.L    FreeMemory(PC),D0
  1976.     MOVE    #FreeMemPos,TextOffset
  1977.     JSR    Print6DecDigits
  1978.     BRA.S    fremend
  1979.  
  1980. ShowTuneMem
  1981.     MOVE.L    SongDataPtr,A0
  1982.     LEA    42(A0),A0
  1983.     MOVE    TuneUp(PC),D7
  1984.     SUBQ    #1,D7
  1985.     MOVE    #31,TuneUp
  1986.     MOVEQ    #0,D0    ; Zero length
  1987. stumeloop
  1988.     MOVEQ    #0,D1
  1989.     MOVE    (A0),D1
  1990.     ASL    #1,D1
  1991.     ADD.L    D1,D0    ; Add samplelength
  1992.     ADD.L    #30,A0
  1993.     DBF    D7,stumeloop
  1994.     ADD.L    #1084,D0    ; Add 1084 to length
  1995.     MOVE.L    SongDataPtr,A0
  1996.     MOVEQ    #127,D7
  1997.     ADD.L    #952,A0
  1998.     MOVEQ    #0,D6
  1999. stumeloop2
  2000.     MOVE.B    (A0)+,D5
  2001.     CMP.B    D5,D6
  2002.     BHI.S    stumeskip
  2003.     MOVE.B    D5,D6
  2004. stumeskip
  2005.     DBF    D7,stumeloop2
  2006.     ADDQ    #1,D6
  2007.     ASL.L    #8,D6
  2008.     ASL.L    #2,D6
  2009.     ADD.L    D6,D0    ; Add 1024 x Number of patterns
  2010.     CMP.L    TuneMemory(PC),D0
  2011.     BEQ    Return1
  2012.     MOVE.L    D0,TuneMemory
  2013.     TST.B    ShowDecFlag
  2014.     BNE.S    shtudec
  2015.     MOVE.L    D0,D6
  2016.     MOVE    #TuneMemPos,TextOffset
  2017.     SWAP    D0
  2018.     AND    #$FF,D0
  2019.     MOVE    D0,WordNumber
  2020.     JSR    PrintHexByte
  2021.     MOVE    D6,WordNumber
  2022.     JMP    PrintHexWord
  2023.  
  2024. shtudec    MOVE.L    TuneMemory(PC),D0
  2025.     MOVE    #TuneMemPos,TextOffset
  2026.     JMP    Print6DecDigits
  2027.  
  2028. UpdateFreeMem    dc.w    0
  2029. FreeMemory    dc.l    0
  2030. TuneMemory    dc.l    0
  2031. TuneUp        dc.w    31
  2032.  
  2033. ;---- Audio Channel Toggles ----
  2034.  
  2035. CheckToggle
  2036.     MOVE    MouseY2,D0
  2037.     CMP    #1,CurrScreen
  2038.     BNE    Return1
  2039.     CMP    #44,D0
  2040.     BHS    Return1
  2041. DoToggleMute
  2042.     CMP    #34,D0
  2043.     BHS.S    ToggleCh4
  2044.     CMP    #23,D0
  2045.     BHS.S    ToggleCh3
  2046.     CMP    #12,D0
  2047.     BHS.S    ToggleCh2
  2048. ToggleCh1
  2049.     LEA    audchan1toggle(PC),A0
  2050.     BRA.S    TogCh
  2051. ToggleCh2
  2052.     LEA    audchan2toggle(PC),A0
  2053.     BRA.S    TogCh
  2054. ToggleCh3
  2055.     LEA    audchan3toggle(PC),A0
  2056.     BRA.S    TogCh
  2057. ToggleCh4
  2058.     LEA    audchan4toggle(PC),A0
  2059. TogCh    CLR.B    RawKeyCode
  2060.     EOR    #1,(A0)
  2061.     BSR    WaitForButtonUp
  2062.     CLR    D0
  2063.     MOVE    audchan4toggle(PC),D0
  2064.     LSL.B    #1,D0
  2065.     OR    audchan3toggle(PC),D0
  2066.     LSL.B    #1,D0
  2067.     OR    audchan2toggle(PC),D0
  2068.     LSL.B    #1,D0
  2069.     OR    audchan1toggle(PC),D0
  2070.     MOVE    D0,ActiveChannels
  2071.     BSR.S    RedrawToggles
  2072.     JSR    Wait_4000
  2073.     JMP    Wait_4000
  2074.  
  2075. RedrawToggles
  2076.     CMP    #1,CurrScreen
  2077.     BNE    Return1
  2078.     LEA    audchan1toggle(PC),A0
  2079.     BSR.S    RedrawSingleTogg
  2080.     LEA    audchan2toggle(PC),A0
  2081.     BSR.S    RedrawSingleTogg
  2082.     LEA    audchan3toggle(PC),A0
  2083.     BSR.S    RedrawSingleTogg
  2084.     LEA    audchan4toggle(PC),A0
  2085. RedrawSingleTogg
  2086.     LEA    BitPlaneData,A1
  2087.     MOVEQ    #0,D0
  2088.     MOVE    2(A0),D0
  2089.     ADD.L    D0,A1
  2090.     MOVEQ    #0,D0
  2091.     MOVE    4(A0),D0
  2092.     LEA    ToggleONdata,A2
  2093.     TST    (A0)
  2094.     BNE.S    rtskip
  2095.     LEA    ToggleOFFdata,A2
  2096. rtskip    ADD.L    D0,A2
  2097.     MOVEQ    #10,D4
  2098. rtloop2    MOVE    (ScreenWidth*2)+8(A2),PlaneSize(A1)
  2099.     MOVE    (A2)+,(A1)
  2100.     LEA    ScreenWidth(A1),A1
  2101.     DBF    D4,rtloop2
  2102.     RTS
  2103.  
  2104. rtdoit    MOVEQ    #10,D4
  2105. rtloop    MOVE    (ScreenWidth*3)+12(A2),PlaneSize(A1)
  2106.     MOVE    (A2)+,(A1)
  2107.     LEA    ScreenWidth(A1),A1
  2108.     DBF    D4,rtloop
  2109.     RTS
  2110.  
  2111. ;---- VU Meters ----
  2112.  
  2113. VUmeters
  2114.     LEA    audchan1temp,A1
  2115.     LEA    VUSpriteData1,A2
  2116.     MOVE    audchan1toggle(PC),D0
  2117.     BSR.S    OneVUmeter
  2118.     LEA    audchan2temp,A1
  2119.     LEA    VUSpriteData2,A2
  2120.     MOVE    audchan2toggle(PC),D0
  2121.     BSR.S    OneVUmeter
  2122.     LEA    audchan3temp,A1
  2123.     LEA    VUSpriteData3,A2
  2124.     MOVE    audchan3toggle,D0
  2125.     BSR.S    OneVUmeter
  2126.     LEA    audchan4temp,A1
  2127.     LEA    VUSpriteData4,A2
  2128.     MOVE    audchan4toggle,D0
  2129. OneVUmeter
  2130.     TST.L    RunMode
  2131.     BEQ.S    VUmeterDown
  2132.     TST    (A1)
  2133.     BEQ.S    VUmeterDown
  2134.     TST    D0
  2135.     BEQ.S    VUmeterDown
  2136.     TST.L    Counter
  2137.     BNE.S    VUmeterDown
  2138.     MOVEQ    #0,D0        ; New note
  2139.     MOVE.B    n_volume(A1),D0    ; Get volume
  2140.     CMP    #$40,D0        ; Higher than $40 ?
  2141.     BLS.S    iccskip        ; No, skip
  2142.     MOVEQ    #$40,D0        ; Yes, set to $40
  2143. iccskip    LEA    VUmeterHeights(PC),A3
  2144.     MOVE.B    #233,D7        ; Set to 233
  2145.     SUB.B    0(A3,D0.W),D7    ; Subtract to get new height
  2146.     MOVE.B    D7,(A2)
  2147.     RTS
  2148.  
  2149. VUmeterDown
  2150.     CMP.B    #233,(A2)
  2151.     BEQ    Return1
  2152.     ADDQ.B    #1,(A2)
  2153.     RTS
  2154.  
  2155. audchan1toggle    dc.w    1,(ScreenWidth*01)+38,0
  2156. Chan1Volume    dc.w    0
  2157. audchan2toggle    dc.w    1,(ScreenWidth*12)+38,22
  2158. Chan2Volume    dc.w    0
  2159. audchan3toggle    dc.w    1,(ScreenWidth*23)+38,44
  2160. Chan3Volume    dc.w    0
  2161. audchan4toggle    dc.w    1,(ScreenWidth*34)+38,66
  2162. Chan4Volume    dc.w    0
  2163. ActiveChannels    dc.w    15
  2164.  
  2165. VUmeterHeights
  2166.     dc.b    0,0,1,2,2,3,4,5,5,6,7,8,8,9,10,11
  2167.     dc.b    11,12,13,14,14,15,16,17,17,18,19,20,20,21,22,23
  2168.     dc.b    23,24,25,26,26,27,28,29,29,30,31,32,32,33,34,35
  2169.     dc.b    35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47
  2170.     dc.b    47,0
  2171.  
  2172. SetAnalyzerVolumes
  2173.     MOVEM.L    D0-D3/A0,-(SP)
  2174.     LSL    #8,D2
  2175.     DIVU    #640,D2
  2176.     CMP    #$F0A0,A5
  2177.     BNE.S    savCh2
  2178.     TST    audchan1toggle
  2179.     BEQ.S    savCh2
  2180.     CMP    Chan1Volume,D2 ; volume
  2181.     BLO.S    savCh2
  2182.     MOVE    D2,Chan1Volume
  2183. savCh2    CMP    #$F0B0,A5
  2184.     BNE.S    savCh3
  2185.     TST    audchan2toggle
  2186.     BEQ.S    savCh3
  2187.     CMP    Chan2Volume,D2
  2188.     BLO.S    savCh3
  2189.     MOVE    D2,Chan2Volume
  2190. savCh3    CMP    #$F0C0,A5
  2191.     BNE.S    savCh4
  2192.     TST    audchan3toggle
  2193.     BEQ.S    savCh4
  2194.     CMP    Chan3Volume,D2
  2195.     BLO.S    savCh4
  2196.     MOVE    D2,Chan3Volume
  2197. savCh4    CMP    #$F0D0,A5
  2198.     BNE.S    savNone
  2199.     TST    audchan4toggle
  2200.     BEQ.S    savNone
  2201.     CMP    Chan4Volume,D2
  2202.     BLO.S    savNone
  2203.     MOVE    D2,Chan4Volume
  2204. savNone    MOVEM.L    (SP)+,D0-D3/A0
  2205.     MOVEQ    #1,D4
  2206.     RTS
  2207.  
  2208. ;---- Disk Op. ---- +++
  2209.  
  2210. DiskOp    CLR.B    RawKeyCode
  2211.     MOVE    CurrScreen,D0
  2212.     CMP    #3,D0
  2213.     BEQ    ExitFromDir
  2214.     CMP    #1,D0
  2215.     BNE    Return1
  2216. ShowDirScreen
  2217.     BSR    WaitForButtonUp
  2218.     MOVE    #3,CurrScreen
  2219.     ST    DisableAnalyzer
  2220.     ST    NoSampleInfo
  2221.     JSR    ClearAnalyzerColors
  2222.     BSR    Clear100Lines
  2223.     BSR    SwapDirScreen
  2224.     BEQ    DisplayMainAll
  2225.     BSR    ShowDiskSpace
  2226.     BSR    ShowModPackMode
  2227.     BSR    ShowPackMode
  2228.     BSR    ShowRAWIFFMode
  2229. DoAutoDir
  2230.     TST.B    AutoDirFlag
  2231.     BEQ    SelectPath
  2232.     MOVE    DirPathNum,D0 
  2233.     BEQ    LoadModuleGadg
  2234.     CMP    #1,D0
  2235.     BEQ    LoadSongGadg
  2236.     CMP    #2,D0
  2237.     BEQ    LoadSampleGadg
  2238.     BRA    SelectModules
  2239. SelectPath
  2240.     MOVE    DirPathNum,D0 
  2241.     BEQ    SelectModules
  2242.     CMP    #1,D0
  2243.     BEQ    SelectSongs
  2244.     BRA    SelectSamples
  2245.  
  2246. SwapDirScreen
  2247.     MOVE.L    DecompMemPtr,D0
  2248.     BEQ.S    sdirs2
  2249.     MOVE.L    D0,A1
  2250.     BSR.S    ssets3
  2251.     BRA    FreeDecompMem
  2252. sdirs2    LEA    DirScreenData,A0
  2253.     BSR    Decompact
  2254.     BEQ    Return1
  2255. ssets3
  2256.     LEA    BitPlaneData,A0
  2257.     MOVEQ    #1,D2                ;2 planes
  2258. sxloop1    MOVE    #1000-1,D0
  2259. sxloop2    MOVE.L    (A0),D1
  2260.     MOVE.L    (A1),(A0)+
  2261.     MOVE.L    D1,(A1)+
  2262.     DBF    D0,sxloop2
  2263.     LEA    (ScreenWidth*156)(A0),A0
  2264.     DBF    D2,sxloop1
  2265.     MOVEQ    #-1,D0
  2266.     RTS
  2267.  
  2268. CheckDirGadgets
  2269.     MOVEM.W    MouseX2,D0/D1
  2270.     CMP    #44,D1
  2271.     BHI    CheckDirGadgets2
  2272.     CMP    #33,D1
  2273.     BLS.S    ExtrasMenu
  2274.     CMP    #11,D0
  2275.     BLO    DirBrowseGadg
  2276.     CMP    #187,D0
  2277.     BLO    DirPathGadg
  2278.     CMP    #216,D0
  2279.     BLO    ParentDirGadg
  2280.     CMP    #307,D0
  2281.     BLO    ShowFreeDiskGadg
  2282.     BRA    CheckDirGadgets2
  2283.  
  2284. ExtrasMenu
  2285.     CMP    #94,D0
  2286.     BHS    ToggleMenu
  2287.     CMP    #22,D1
  2288.     BHI.S    DeleteFileGadg
  2289.     CMP    #11,D1
  2290.     BHI.S    RenameFileGadg
  2291.     BRA    DiskFormatGadg
  2292.  
  2293. RenameFileGadg
  2294.     BSR    StorePtrCol
  2295.     BSR    WaitForButtonUp
  2296.     BSR    ClearFileNames
  2297.     MOVE.L    PathPtr,A4
  2298.     BSR    ShowDirPath
  2299.     LEA    FileNamesPtr(PC),A5
  2300.     BSR    HasDiskChanged
  2301.     BEQ.S    RenameFileDirOk
  2302.     BSR    ClearDirTotal
  2303.     BSR    DirDisk
  2304.     BNE    RestorePtrCol
  2305.  
  2306. RenameFileDirOk
  2307.     MOVE    FileNameScrollPos,D0
  2308.     BSR    RedrawFileNames
  2309.     MOVE    #10,Action
  2310.     LEA    SelectFileText,A0
  2311.     JSR    ShowStatusText
  2312.     BRA    RestorePtrCol
  2313.  
  2314. DeleteFileGadg
  2315.     MOVE    DirPathNum,D0
  2316.     BEQ    DeleteModuleGadg
  2317.     CMP    #1,D0
  2318.     BEQ    DeleteSongGadg
  2319.     CMP    #2,D0
  2320.     BEQ    DeleteSampleGadg
  2321.     RTS
  2322.  
  2323. ToggleMenu
  2324.     CMP    #146,D0
  2325.     BHS    SelectMenu
  2326.     CMP    #22,D1
  2327.     BHI    ToggleIFFSave
  2328.     CMP    #11,D1
  2329.     BHI.S    ToggleSongPack
  2330. ToggleModPack
  2331.     CLR.B    ModPackMode
  2332.     BSR    ShowNotImpl
  2333. ShowModPackMode
  2334.     LEA    ToggleOFFText(PC),A0
  2335.     TST.B    ModPackMode
  2336.     BEQ.S    smpmskp
  2337.     LEA    ToggleONText2(PC),A0
  2338. smpmskp    MOVEQ    #3,D0
  2339.     MOVE    #175,D1
  2340.     JSR    ShowText3
  2341.     BRA    WaitForButtonUp
  2342.  
  2343. ShowNotImpl
  2344.     LEA    NotImplText(PC),A0
  2345.     JSR    ShowStatusText
  2346.     BRA    SetErrorPtrCol
  2347.  
  2348. NotImplText    dc.b    'Not implemented',0
  2349.  
  2350. ToggleSongPack
  2351.     EOR.B    #1,PackMode
  2352. ShowPackMode
  2353.     LEA    ToggleOFFText(PC),A0
  2354.     TST.B    PackMode
  2355.     BEQ.S    spsskip
  2356.     LEA    ToggleONText2(PC),A0
  2357. spsskip    MOVEQ    #3,D0
  2358.     MOVE    #615,D1
  2359.     JSR    ShowText3
  2360.     BRA    WaitForButtonUp
  2361.  
  2362. ToggleIFFSave
  2363.     EOR.B    #1,RAWIFFMode
  2364. ShowRAWIFFMode
  2365.     LEA    RAWText(PC),A0
  2366.     TST.B    RAWIFFMode
  2367.     BEQ.S    sraffu
  2368.     LEA    IFFText(PC),A0
  2369. sraffu    MOVEQ    #3,D0
  2370.     MOVE    #1055,D1
  2371.     JSR    ShowText3
  2372.     BRA    WaitForButtonUp
  2373.  
  2374. RAWText    dc.b "RAW",0
  2375. IFFText    dc.b "IFF",0
  2376.  
  2377. SelectMenu
  2378.     CMP    #156,D0
  2379.     BHS    LoadMenu
  2380.     CMP    #22,D1
  2381.     BHI    SelectSamples
  2382.     CMP    #11,D1
  2383.     BHI    SelectSongs
  2384.     BRA    SelectModules
  2385.  
  2386. LoadMenu
  2387.     CMP    #238,D0
  2388.     BHS.S    SaveMenu
  2389.     CMP    #22,D1
  2390.     BHI    LoadSampleGadg
  2391.     CMP    #11,D1
  2392.     BHI    LoadSongGadg
  2393.     BRA    LoadModuleGadg
  2394.  
  2395. SaveMenu
  2396.     CMP    #22,D1
  2397.     BHI    SaveSampleGadg
  2398.     CMP    #11,D1
  2399.     BHI    SaveSongGadg
  2400.     BRA    SaveModuleGadg
  2401.  
  2402. CheckDirGadgets2
  2403.     MOVEM    MouseX2,D0/D1
  2404.     CMP    #3,CurrScreen
  2405.     BNE    Return1
  2406.     CMP    #307,D0
  2407.     BLO    FileNamePressed
  2408.     CMP    #44,D1
  2409.     BLS    FileNameOneUp
  2410.     CMP    #89,D1
  2411.     BLO.S    ExitFromDir
  2412.     BRA    FileNameOneDown
  2413.  
  2414. ExitFromDir
  2415.     BSR    WaitForButtonUp
  2416.     CLR.B    RawKeyCode
  2417.     BSR    SwapDirScreen
  2418.     BSR    Clear100Lines
  2419. DisplayMainAll
  2420.     BSR    DisplayMainScreen
  2421.     JSR    ShowSongLength
  2422.     JSR    ShowSampleInfo
  2423.     JSR    ShowSongName
  2424.     JSR    Show_MS
  2425.     TST    LoadInProgress
  2426.     BNE.S    dimaskp
  2427.     JSR    ShowAllRight
  2428. dimaskp    JMP    ShowPosition
  2429.  
  2430. DirBrowseGadg
  2431.     MOVEQ    #0,D3
  2432.     MOVE    DirPathNum,D3
  2433.     LEA    dpnum(PC),A0
  2434.     ADD.L    D3,A0
  2435.     MOVEQ    #0,D0
  2436.     MOVE.B    (A0),D0
  2437.     ADDQ.B    #1,D0
  2438.     CMP.B    #7,D0
  2439.     BLO.S    dbgskip
  2440.     MOVEQ    #0,D0
  2441. dbgskip    MOVE.B    D0,(A0)
  2442.     MULU    #5,D0
  2443.     MOVE.L    PathPtr,A0
  2444.     MOVEQ    #63,D1
  2445.     MOVEQ    #0,D2
  2446. dbglop1    MOVE.B    D2,(A0)+
  2447.     DBF    D1,dbglop1
  2448.     LEA    dirpaths(PC),A0
  2449.     LEA    -5(A0,D0.W),A0
  2450.     TST    D0
  2451.     BNE.S    dbgskp2
  2452.     LEA    ModulesPath,A0
  2453.     TST    D3
  2454.     BEQ.S    dbgskp2
  2455.     LEA    SongsPath,A0
  2456.     CMP    #1,D3
  2457.     BEQ.S    dbgskp2
  2458.     LEA    SamplePath,A0
  2459. dbgskp2    MOVE.L    PathPtr,A1
  2460. dbglop2    MOVE.B    (A0)+,(A1)+
  2461.     BNE.S    dbglop2
  2462.     BSR    ShowDirPath
  2463.     MOVE    #3,WaitTime
  2464.     BRA    WaitALittle
  2465.  
  2466. dirpaths
  2467.     dc.b "DF0:",0,"DF1:",0,"SYS:",0,"WORK:",0,"RAM:",0,"ST-00:",0
  2468. dpnum    dc.b 0,0,0,0
  2469.     even
  2470. DirPathNum
  2471.     dc.w 3
  2472.  
  2473. SelectModules
  2474.     MOVEQ    #0,D0
  2475.     BRA.S    ChangePath
  2476. SelectSongs
  2477.     MOVEQ    #1,D0
  2478.     BRA.S    ChangePath
  2479. SelectSamples
  2480.     MOVEQ    #2,D0
  2481. ChangePath
  2482.     MOVE.L    TextBplPtr,A0
  2483.     LEA    178(A0),A0
  2484.     MOVEQ    #0,D2
  2485.     MOVEQ    #26,D1
  2486. chpalop    MOVE    D2,(A0)
  2487.     LEA    ScreenWidth(A0),A0
  2488.     DBF    D1,chpalop
  2489.     LEA    ModulesPath2,A4
  2490.     MOVE    #178,D1
  2491.     MOVE    D0,DirPathNum
  2492.     BEQ.S    chpaski
  2493.     LEA    SongsPath2,A4
  2494.     MOVE    #618,D1
  2495.     CMP    #1,D0
  2496.     BEQ.S    chpaski
  2497.     LEA    SamplePath2,A4
  2498.     MOVE    #1058,D1
  2499. chpaski    MOVE.L    TextBplPtr,A0
  2500.     LEA    (A0,D1.W),A0
  2501.     MOVE    #$0100,(A0)
  2502.     MOVE    #$0F80,40(A0)
  2503.     MOVE    #$0FC0,80(A0)
  2504.     MOVE    #$0F80,120(A0)
  2505.     MOVE    #$0100,160(A0)
  2506.     MOVE.L    A4,PathPtr
  2507.     BSR    ShowDirPath
  2508.     BRA    WaitForButtonUp
  2509.  
  2510. ;---- Song Gadgets ----
  2511.  
  2512. LoadSongGadg
  2513.     BSR    StorePtrCol
  2514.     BSR    WaitForButtonUp
  2515.     BSR    ClearFileNames
  2516.     BSR    SelectSongs
  2517.     LEA    FileNamesPtr(PC),A5
  2518.     BSR    HasDiskChanged
  2519.     BEQ    LoadSongDirOk
  2520.     BSR    ClearDirTotal
  2521.     BSR    DirDisk
  2522.     BNE    RestorePtrCol
  2523. LoadSongDirOk
  2524.     MOVE    FileNameScrollPos,D0
  2525.     BSR    RedrawFileNames
  2526.     MOVE    #1,Action
  2527.     LEA    SelectSongText,A0
  2528.     JSR    ShowStatusText
  2529.     BRA    RestorePtrCol
  2530.  
  2531. SaveSongGadg
  2532.     BSR    SelectSongs
  2533.     LEA    SaveSongText,A0
  2534.     BSR    AreYouSure
  2535.     BNE    Return1
  2536.     BSR    RestorePtrCol
  2537.     BSR    ClearFileNames
  2538.     BSR    StopIt
  2539.     JSR    SaveSong
  2540.     MOVE    #1,Action
  2541.     RTS
  2542.  
  2543. DeleteSongGadg
  2544.     BSR    WaitForButtonUp
  2545.     BSR    ClearFileNames
  2546.     BSR    SelectSongs
  2547.     LEA    FileNamesPtr(PC),A5
  2548.     BSR    HasDiskChanged
  2549.     BEQ.S    DeleteSongDirOk
  2550.     BSR    ClearDirTotal
  2551.     BSR    DirDisk
  2552.     BEQ.S    DeleteSongDirOk
  2553.     BRA    RestorePtrCol
  2554.  
  2555. DeleteSongDirOk
  2556.     MOVE    FileNameScrollPos,D0
  2557.     BSR    RedrawFileNames
  2558.     MOVE    #2,Action
  2559.     LEA    SelectSongText,A0
  2560.     JSR    ShowStatusText
  2561.     BRA    SetDeletePtrCol
  2562.  
  2563. ;---- Module Gadgets ----
  2564.  
  2565. LoadModuleGadg
  2566.     BSR    StorePtrCol
  2567.     BSR    WaitForButtonUp
  2568.     BSR    ClearFileNames
  2569.     BSR    SelectModules
  2570.     LEA    FileNamesPtr(PC),A5
  2571.     BSR    HasDiskChanged
  2572.     BEQ.S    LoadModDirOk
  2573.     BSR    ClearDirTotal
  2574.     BSR    DirDisk
  2575.     BEQ.S    LoadModDirOk
  2576.     BRA    RestorePtrCol
  2577.  
  2578. LoadModDirOk
  2579.     MOVE    FileNameScrollPos,D0
  2580.     BSR    RedrawFileNames
  2581.     MOVE    #3,Action
  2582.     LEA    SelectModuleText,A0
  2583.     JSR    ShowStatusText
  2584.     BRA    RestorePtrCol
  2585.  
  2586. SaveModuleGadg
  2587.     BSR    SelectModules
  2588.     LEA    SaveModuleText,A0
  2589.     BSR    AreYouSure
  2590.     BNE    Return1
  2591.     JSR    SaveModule
  2592.     MOVE    #3,Action
  2593.     JMP    ShowAllRight
  2594.  
  2595. DeleteModuleGadg
  2596.     BSR    WaitForButtonUp
  2597.     BSR    ClearFileNames
  2598.     BSR    SelectModules
  2599.     LEA    FileNamesPtr(PC),A5
  2600.     BSR    HasDiskChanged
  2601.     BEQ.S    DeleteModDirOk
  2602.     BSR    ClearDirTotal
  2603.     BSR    DirDisk
  2604.     BEQ.S    DeleteModDirOk
  2605.     BRA    RestorePtrCol
  2606.  
  2607. DeleteModDirOk
  2608.     MOVE    FileNameScrollPos(PC),D0
  2609.     BSR    RedrawFileNames
  2610.     MOVE    #4,Action
  2611.     LEA    SelectModuleText,A0
  2612.     JSR    ShowStatusText
  2613.     BRA    SetDeletePtrCol
  2614.  
  2615. ;---- Sample Gadgets ----
  2616.  
  2617. LoadSampleGadg
  2618.     BSR    StorePtrCol
  2619.     BSR    WaitForButtonUp
  2620.     BSR    ClearFileNames
  2621.     BSR    SelectSamples
  2622.     LEA    FileNamesPtr(PC),A5
  2623.     BSR    HasDiskChanged
  2624.     BEQ.S    LoadSampleDirOk
  2625.     BSR    ClearDirTotal
  2626.     BSR    DirDisk
  2627.     BEQ.S    LoadSampleDirOk
  2628.     BRA    RestorePtrCol
  2629.  
  2630. LoadSampleDirOk
  2631.     MOVE    FileNameScrollPos,D0
  2632.     BSR    RedrawFileNames
  2633.     MOVE    #5,Action
  2634.     LEA    SelectSampleText,A0
  2635.     JSR    ShowStatusText
  2636.     BRA    RestorePtrCol
  2637.  
  2638. SaveSampleGadg
  2639.     BSR    SelectSamples
  2640.     CLR.B    RawKeyCode
  2641.     MOVE    InsNum,D0
  2642.     BEQ    NotSampleNull
  2643.     LEA    SaveSampleText,A0
  2644.     BSR    AreYouSure
  2645.     BNE    Return1
  2646. dosavesample
  2647.     BSR    StorePtrCol
  2648.     BSR    CreateSampleName
  2649.     MOVE.L    DiskDataLength,D1
  2650.     BEQ    Return1
  2651.     MOVEQ    #0,D1
  2652.     MOVE    InsNum,D1
  2653.     LSL.L    #2,D1
  2654.     LEA    SamplePtrs,A0
  2655.     MOVE.L    0(A0,D1.W),DiskDataPtr
  2656.  
  2657.     BSR    SetDiskPtrCol
  2658.     MOVE.L    DOSBase,A6
  2659.     MOVE.L    FileNamePtr,D1
  2660.     MOVE.L    #1006,D2
  2661.     JSR    LVOOpen(A6)
  2662.     MOVE.L    D0,FileHandle
  2663.     BNE    SaveSample
  2664.     JSR    CantOpenFile
  2665.     BRA    ErrorRestoreCol
  2666.  
  2667. SaveSample
  2668.     LEA    SavingSampleText,A0
  2669.     JSR    ShowStatusText
  2670.     TST.B    RAWIFFMode
  2671.     BEQ    savesam
  2672.     MOVE.L    FileHandle,D1
  2673.     MOVE.L    #IFFFORM,D2
  2674.     MOVEQ    #IFFEND-IFFFORM,D3
  2675.     JSR    LVOWrite(A6)
  2676. savesam    MOVE.L    FileHandle,D1
  2677.     MOVE.L    DiskDataPtr,D2
  2678.     MOVE.L    DiskDataLength,D3
  2679.     JSR    LVOWrite(A6)
  2680.  
  2681.     MOVE.L    FileHandle,D1
  2682.     JSR    LVOClose(A6)
  2683.     CLR.L    FileHandle
  2684.     MOVE    #5,Action
  2685.     JSR    ShowAllRight
  2686.     BRA    RestorePtrCol
  2687.  
  2688. IFFFORM    dc.b    "FORM"
  2689.     dc.l    0
  2690.     dc.b    "8SVX"
  2691. IFFVHDR    dc.b    "VHDR"
  2692.     dc.l    20
  2693.     dc.l    0,0,32    ; oneshot, repeat, hisamples
  2694.     dc.w    16726    ; This is really NTSC (16574 for PAL!!!)
  2695.     dc.b    1,0    ; octaves, compression
  2696.     dc.l    $10000    ; volume
  2697. IFFNAME    dc.b    "NAME"
  2698.     dc.l    24
  2699.     dcb.b    24,0
  2700.     dc.b    "ANNO"
  2701.     dc.l    16
  2702.     dc.b    "Protracker 1.2e",0
  2703. IFFBODY    dc.b    "BODY"
  2704.     dc.l    0
  2705. IFFEND
  2706.  
  2707.  
  2708. ;---- Delete Sample ----
  2709.  
  2710. DeleteSampleGadg
  2711.     BSR    StorePtrCol
  2712.     BSR    WaitForButtonUp
  2713.     BSR    ClearFileNames
  2714.     BSR    SelectSamples
  2715.     LEA    FileNamesPtr(PC),A5
  2716.     BSR    HasDiskChanged
  2717.     BEQ.S    DeleteSamDirOk
  2718.     BSR    ClearDirTotal
  2719.     BSR    DirDisk
  2720.     BEQ.S    DeleteSamDirOk
  2721.     BRA    RestorePtrCol
  2722.  
  2723. DeleteSamDirOk
  2724.     MOVE    FileNameScrollPos(PC),D0
  2725.     BSR    RedrawFileNames
  2726.     MOVE    #6,Action
  2727.     LEA    SelectSampleText,A0
  2728.     JSR    ShowStatusText
  2729.     BRA    SetDeletePtrCol
  2730.  
  2731. ;---- Directory Path Gadget ----
  2732.  
  2733. DirPathGadg
  2734.     BSR    StorePtrCol
  2735.     BSR    SetWaitPtrCol
  2736.     MOVE.L    PathPtr,A6
  2737.     MOVE.L    A6,ShowTextPtr
  2738.     MOVE.L    A6,TextEndPtr
  2739.     ADD.L    #63,TextEndPtr
  2740.     MOVE    #19,TextLength
  2741.     MOVE    #1484,A4
  2742.     BSR    GetTextLine
  2743.     BRA    RestorePtrCol
  2744.  
  2745.  
  2746. CopyPath
  2747.     LEA    FileName,A1
  2748.     TST.B    (A0)        ; If no path
  2749.     BEQ    Return1
  2750. cploop    MOVE.B    (A0)+,(A1)+    ; Copy path to filename
  2751.     BNE.S    cploop
  2752.     CMP.B    #':',-2(A1)    ; If ending with ':' it's ok
  2753.     BEQ.S    PathCharBack
  2754.     CMP.B    #'/',-2(A1)    ; If ending with '/' it's ok
  2755.     BEQ.S    PathCharBack
  2756.     MOVE.B    #'/',-1(A1)    ; Add '/' to end path
  2757.     RTS
  2758.  
  2759. PathCharBack
  2760.     SUBQ.L    #1,A1
  2761.     RTS
  2762.  
  2763. ShowDirPath
  2764.     CMP    #3,CurrScreen
  2765.     BNE    Return1
  2766.     MOVEM.L    D0-D7/A0-A6,-(SP)
  2767.     MOVE.L    PathPtr,A0
  2768.     MOVEQ    #19,D0
  2769.     MOVE    #1484,D1
  2770.     JSR    ShowText3
  2771.     MOVEM.L    (SP)+,D0-D7/A0-A6
  2772.     RTS
  2773.  
  2774. ;---- File List Gadgets ----
  2775.  
  2776. FileNameOneUp
  2777.     TST    Action
  2778.     BEQ    Return1
  2779.     LEA    FileNamesPtr(PC),A5
  2780.     MOVE    FileNameScrollPos(PC),D0
  2781.     BEQ    Return1
  2782.     SUBQ    #1,D0
  2783.     BTST    #2,$DFF016
  2784.     BNE    RedrawFileNames
  2785.     SUBQ    #3,D0
  2786.     BPL    RedrawFileNames
  2787.     MOVEQ    #0,D0
  2788.     BRA    RedrawFileNames
  2789.  
  2790. FileNameOneDown
  2791.     TST    Action
  2792.     BEQ    Return1
  2793.     LEA    FileNamesPtr(PC),A5
  2794.     MOVE    FileNameScrollPos(PC),D0
  2795.     ADDQ    #1,D0
  2796.     BTST    #2,$DFF016
  2797.     BNE.S    fnod2
  2798.     ADDQ    #3,D0
  2799. fnod2    MOVE    16(A5),D1
  2800.     SUBQ    #8,D1
  2801.     BMI    Return1
  2802.     CMP    D1,D0
  2803.     BLS    RedrawFileNames
  2804.     MOVE    D1,D0
  2805.     BRA    RedrawFileNames
  2806.  
  2807. ;---- Clicked on a filename ----
  2808.  
  2809. FileNamePressed
  2810.     SUB    #44,D1
  2811.     MOVE    #1,UpdateFreeMem
  2812.     TST    Action
  2813.     BEQ    Return1
  2814.     CMP    #3,D1
  2815.     BLO    Return1
  2816.     CMP    #50,D1
  2817.     BHI    Return1
  2818.     SUBQ    #3,D1
  2819.     AND.L    #$FFFF,D1
  2820.     DIVU    #6,D1
  2821.     MOVE    D1,FileNameScrollPos+2
  2822.     LEA    FileNamesPtr(PC),A5
  2823.     MOVE    FileNameScrollPos(PC),D0
  2824.     ADD    D1,D0
  2825.     CMP    16(A5),D0
  2826.     BHS    Return1
  2827.     MULU    #36,D0
  2828.     ADD.L    (A5),D0
  2829.     MOVE.L    D0,A0
  2830.     TST.L    32(A0)
  2831.     BMI.S    AddDirectory
  2832.     MOVEQ    #DirNameLength-1,D0
  2833.     LEA    DirInputName,A1
  2834. fnploop    MOVE.B    (A0)+,(A1)+
  2835.     DBF    D0,fnploop
  2836.     MOVE    Action,D6
  2837.     CMP    #1,D6
  2838.     BEQ    LoadSong
  2839.     CMP    #2,D6
  2840.     BEQ    DeleteSong
  2841.     CMP    #3,D6
  2842.     BEQ    xLoadModule
  2843.     CMP    #4,D6
  2844.     BEQ    DeleteModule
  2845.     CMP    #5,D6
  2846.     BEQ    LoadSample
  2847.     CMP    #6,D6
  2848.     BEQ    DeleteSample
  2849.     CMP    #10,D6
  2850.     BEQ    RenameFile
  2851.     RTS
  2852.  
  2853. xLoadModule    JMP    LoadModule
  2854.  
  2855. AddDirectory
  2856.     MOVE.L    A0,-(SP)
  2857.     MOVE.L    PathPtr,A0
  2858.     BSR    CopyPath
  2859.     MOVE.L    (SP)+,A0
  2860.     MOVEQ    #DirNameLength-1,D0
  2861. addplop    MOVE.B    (A0)+,(A1)+
  2862.     DBF    D0,addplop
  2863.     LEA    FileName,A0
  2864.     MOVE.L    PathPtr,A1
  2865.     MOVEQ    #62,D0
  2866. addplp2    MOVE.B    (A0)+,(A1)+
  2867.     DBF    D0,addplp2
  2868. addpdir    BSR    ShowDirPath
  2869.     MOVE    Action,D6
  2870.     CMP    #1,D6
  2871.     BEQ    LoadSongGadg
  2872.     CMP    #2,D6
  2873.     BEQ    DeleteSongGadg
  2874.     CMP    #3,D6
  2875.     BEQ    LoadModuleGadg
  2876.     CMP    #4,D6
  2877.     BEQ    DeleteModuleGadg
  2878.     CMP    #5,D6
  2879.     BEQ    LoadSampleGadg
  2880.     CMP    #6,D6
  2881.     BEQ    DeleteSampleGadg
  2882.     CMP    #10,D6
  2883.     BEQ    RenameFileGadg
  2884.     RTS
  2885.  
  2886. ParentDirGadg
  2887.     BSR    WaitForButtonUp
  2888.     MOVE.L    PathPtr,A0
  2889.     MOVE.L    A0,A1
  2890. pdgloop    TST.B    (A1)+
  2891.     BNE.S    pdgloop
  2892.     SUBQ.L    #1,A1
  2893.     CMP.L    A0,A1
  2894.     BLS    Return1
  2895.     SUBQ.L    #1,A1
  2896.     CMP.B    #'/',(A1)
  2897.     BNE.S    pdgskp1
  2898.     CLR.B    (A1)
  2899. pdgskp1    CMP.B    #':',(A1)
  2900.     BEQ.S    addpdir
  2901.     CMP.B    #'/',(A1)
  2902.     BEQ    pdgslsh
  2903.     CLR.B    (A1)
  2904.     CMP.L    A0,A1
  2905.     BLS.S    addpdir
  2906.     SUBQ.L    #1,A1
  2907.     BRA.S    pdgskp1
  2908.  
  2909. pdgslsh    CLR.B    (A1)
  2910.     BRA    addpdir
  2911.  
  2912. FileNamesPtr
  2913.     dc.l    0  ; A5+ 0
  2914.     dc.l    0  ;   + 4
  2915.     dc.l    0  ;   + 8
  2916.     dc.l    0  ;   +12
  2917.     dc.w    0  ;   +16
  2918.     dc.w    24 ;   +18
  2919. FileNameScrollPos
  2920.     dc.w    0
  2921.     dc.w    0
  2922.  
  2923. ;---- Has Disk Changed ----
  2924.  
  2925. HasDiskChanged
  2926.     MOVE.L    DOSBase,A6
  2927.     MOVE.L    A4,D1
  2928.     MOVEQ    #-2,D2
  2929.     JSR    LVOLock(A6)
  2930.     MOVE.L    D0,FileLock
  2931.     BEQ.S    ExamineError
  2932.     MOVE.L    FileLock,D1
  2933.     MOVE.L    #FileInfoBlock,D2
  2934.     JSR    LVOExamine(A6)
  2935.     TST.L    D0
  2936.     BEQ.S    ExamineError
  2937.     LEA    FileInfoBlock,A0
  2938.     MOVE.L    ofib_DateStamp+ds_Days(A0),D0
  2939.     CMP.L    4(A5),D0
  2940.     BNE.S    DiskChanged
  2941.     MOVE.L    ofib_DateStamp+ds_Minute(A0),D0
  2942.     CMP.L    8(A5),D0
  2943.     BNE.S    DiskChanged
  2944.     MOVE.L    ofib_DateStamp+ds_Tick(A0),D0
  2945.     CMP.L    12(A5),D0
  2946.     BNE.S    DiskChanged
  2947.     MOVE.L    FileLock,D1
  2948.     JSR    LVOUnLock(A6)
  2949.     MOVEQ    #0,D0
  2950.     RTS
  2951.  
  2952. DiskChanged
  2953.     MOVE.L    ofib_DateStamp+ds_Days(A0),4(A5)
  2954.     MOVE.L    ofib_DateStamp+ds_Minute(A0),8(A5)
  2955.     MOVE.L    ofib_DateStamp+ds_Tick(A0),12(A5)
  2956.     MOVE.L    FileLock,D1
  2957.     JSR    LVOUnLock(A6)
  2958.     MOVEQ    #-1,D0
  2959.     RTS
  2960.  
  2961. ExamineError
  2962.     CLR.L    4(A5)
  2963.     MOVEQ    #-1,D0
  2964.     RTS
  2965.  
  2966. ShowFreeDiskGadg
  2967.     BSR    WaitForButtonUp
  2968.     BSR.S    LockAndGetInfo
  2969.     BSR    DirDiskUnlock
  2970.     JMP    ShowAllRight
  2971.  
  2972. LockAndGetInfo
  2973.     BSR    StorePtrCol
  2974.     BSR    SetDiskPtrCol
  2975.     CLR    FileNameScrollPos
  2976.     MOVE.L    DOSBase,A6
  2977.     MOVE.L    A4,D1    ; Dir-path in A4
  2978.     MOVEQ    #-2,D2
  2979.     JSR    LVOLock(A6)
  2980.     MOVE.L    D0,FileLock
  2981.     BEQ    DirDiskError
  2982.     LEA    ReadingDirText,A0
  2983.     JSR    ShowStatusText
  2984.     MOVE.L    FileLock,D1
  2985.     MOVE.L    #InfoData,D2
  2986.     JSR    LVOInfo(A6)
  2987.     LEA    InfoData,A0
  2988.     MOVE.L    12(A0),D0 ; id_NumBlocks
  2989.     SUB.L    16(A0),D0 ; id_NumBlocksUsed
  2990.     MULU    22(A0),D0 ; id_BytesPerBlock + 2
  2991.     MOVE.L    D0,FreeDiskSpace
  2992. ShowDiskSpace
  2993.     MOVE    #1510,TextOffset
  2994.     MOVE.L    FreeDiskSpace,D7
  2995.     TST.B    ShowDecFlag
  2996.     BNE.S    sdsdec
  2997.     SWAP    D7
  2998.     MOVE    D7,WordNumber
  2999.     JSR    PrintHexWord
  3000.     SWAP    D7
  3001.     MOVE    D7,WordNumber
  3002.     JSR    PrintHexWord
  3003.     MOVEQ    #0,D0
  3004.     RTS
  3005.  
  3006. sdsdec    SUB    #2,TextOffset
  3007.     DIVU    #10000,D7
  3008.     MOVE    D7,WordNumber
  3009.     MOVEQ    #0,D0
  3010.     MOVE    D7,D0
  3011.     JSR    Print6DecDigits        ;4
  3012.     SWAP    D7
  3013.     MOVE    D7,WordNumber
  3014.     JSR    Print4DecDigits
  3015.     MOVEQ    #0,D0
  3016.     RTS
  3017.  
  3018.  
  3019.  
  3020. ;---- Get Disk Directory ----
  3021. AllocDirMem
  3022.     ADD    #50,DirEntries
  3023.     MOVE    DirEntries,D0
  3024.     MULU    #36,D0
  3025.     MOVE.L    DirAllocSize(PC),D6
  3026.     MOVE.L    D0,DirAllocSize
  3027.     MOVE.L    #MEMF_CLEAR,D1
  3028.     MOVE.L    4.W,A6
  3029.     JSR    LVOAllocMem(A6)
  3030.     MOVE.L    D0,D7
  3031.     BEQ.S    baehsj
  3032.  
  3033.     MOVE.L    FileNamesPtr(PC),D1
  3034.     MOVE.L    D7,FileNamesPtr
  3035.     TST.L    D1
  3036.     BEQ    Return1
  3037.     TST.L    D6
  3038.     BEQ    Return1
  3039.     MOVE.L    D1,A0
  3040.     MOVE.L    D7,A1
  3041.     MOVE.L    D6,D0
  3042. admloop    MOVE.B    (A0)+,(A1)+
  3043.     SUBQ.L    #1,D6
  3044.     BNE.S    admloop
  3045.     MOVE.L    D1,A1
  3046.     MOVE.L    4.W,A6
  3047.     JSR    LVOFreeMem(A6)
  3048.     RTS
  3049.  
  3050. FreeDirMem
  3051.     MOVE.L    FileNamesPtr(PC),D1
  3052.     BEQ    Return1
  3053.     MOVE.L    D1,A1
  3054.     MOVE.L    DirAllocSize(PC),D0
  3055.     MOVE.L    4.W,A6
  3056.     JSR    LVOFreeMem(A6)
  3057.     CLR.L    FileNamesPtr
  3058.     CLR    DirAllocSize
  3059.     CLR    DirEntries
  3060.     RTS
  3061.  
  3062. baehsj    JSR    OutOfMemErr
  3063.     MOVEQ    #-1,D0
  3064.     RTS
  3065.  
  3066. DirAllocSize    dc.l    0
  3067. DirEntries    dc.w    0
  3068.  
  3069. DirDisk    BSR    FreeDirMem
  3070.     BSR    AllocDirMem
  3071.     BSR    LockAndGetInfo
  3072.     BNE    Return1
  3073.     MOVE.L    FileLock,D1
  3074.     MOVE.L    #FileInfoBlock,D2
  3075.     JSR    LVOExamine(A6)
  3076.     TST.L    D0
  3077.     BEQ    DirDiskError
  3078. ddloop1    MOVE.L    FileLock,D1
  3079.     MOVE.L    #FileInfoBlock,D2
  3080.     MOVE.L    DOSBase,A6
  3081.     JSR    LVOExNext(A6)
  3082.     TST.L    D0
  3083.     BEQ    DirDiskUnlock
  3084.     BTST    #2,$DFF016
  3085.     BEQ.S    AbortDir
  3086.     BSR    NewDirEntry
  3087.     BRA.S    ddloop1
  3088.  
  3089. AbortDir
  3090.     CLR.L    4(A5)
  3091.     LEA    DirAbortedText(PC),A0
  3092.     JSR    ShowStatusText
  3093.     BSR.S    DirDiskUnlock
  3094.     BSR    WaitALittle
  3095.     JSR    ShowAllRight
  3096.     MOVEQ    #0,D0
  3097.     RTS
  3098.  
  3099. DirDiskUnlock
  3100.     MOVE.L    FileLock,D1
  3101.     JSR    LVOUnLock(A6)
  3102.     BSR    RestorePtrCol
  3103.     MOVEQ    #0,D0
  3104.     RTS
  3105.  
  3106. DirAbortedText    dc.b 'dir aborted !',0
  3107.  
  3108. DirDiskError
  3109.     TST.L    FileLock
  3110.     BEQ.S    ddeskip
  3111.     MOVE.L    FileLock,D1
  3112.     JSR    LVOUnLock(A6)
  3113. ddeskip    BSR    RestorePtrCol
  3114.     LEA    CantFindDirText,A0
  3115.     JSR    ShowStatusText
  3116.     BSR    SetErrorPtrCol
  3117.     MOVEQ    #-1,D0
  3118.     RTS
  3119.  
  3120. ClearDirTotal
  3121.     CLR    16(A5)
  3122.     RTS
  3123.  
  3124. CantFindDirText    dc.b "can't find dir !",0,0
  3125.  
  3126.  
  3127. NewDirEntry
  3128.     LEA    FIB_FileName,A0
  3129.     TST.B    ShowDirsFlag
  3130.     BNE.S    ndeok1
  3131.     TST.L    FIB_EntryType
  3132.     BPL    Return1
  3133. ndeok1    TST.L    FIB_EntryType
  3134.     BPL    ndeok2
  3135.     TST.B    ModOnlyFlag
  3136.     BEQ.S    ndeok2
  3137.     TST    DirPathNum
  3138.     BNE.S    ndeok2
  3139.     MOVE.L    (A0),D0
  3140.     AND.L    #$CFCFCFCF,D0
  3141.     CMP.L    #$4D4F440E,D0        ; MOD.
  3142.     BNE    Return1
  3143. ndeok2    MOVE    16(A5),D0
  3144.     CMP    DirEntries,D0
  3145.     BLO.S    ndeok3
  3146.     MOVE.L    A0,-(SP)
  3147.     BSR    AllocDirMem
  3148.     MOVE.L    (SP)+,A0
  3149. ndeok3    MOVE    16(A5),D6
  3150.     BEQ.S    ndeadd1        ; If first entry
  3151.     SUBQ    #1,D6
  3152.     MOVE.L    (A5),A1
  3153. ndeloopname
  3154.     MOVEQ    #0,D2
  3155.     MOVE.L    FIB_EntryType,D0
  3156.     MOVE.L    32(A1),D1
  3157.     TST.L    D0
  3158.     BPL.S    ndesfil    ; if directory, all is well
  3159.     TST.L    D1
  3160.     BMI.S    ndenext    ; was file, so skip if directory
  3161.     BRA.S    ndelopc
  3162. ndesfil    TST.L    D1    ; if file
  3163.     BPL.S    ndeinse
  3164. ndelopc    MOVE.B    (A0,D2.W),D0 ; Get a character
  3165.     BEQ.S    ndeinse
  3166.     CMP.B    #96,D0  ; Lowercase?
  3167.     BLO.S    ndeskp1
  3168.     SUB.B    #32,D0    ; Switch to upper
  3169. ndeskp1    MOVE.B    (A1,D2.W),D1
  3170.     BEQ.S    ndenext
  3171.     CMP.B    #96,D1
  3172.     BLO.S    ndeskp2
  3173.     SUB.B    #32,D1
  3174. ndeskp2    CMP.B    D0,D1
  3175.     BHI.S    ndeinse
  3176.     BNE.S    ndenext
  3177.     ADDQ    #1,D2
  3178.     BRA.S    ndelopc
  3179. ndenext    LEA    36(A1),A1    ; next entry
  3180.     DBF    D6,ndeloopname    ; loop entries
  3181.     MOVE.L    (A5),A1
  3182.     MOVE    16(A5),D0
  3183.     MULU    #36,D0
  3184.     ADD    D0,A1
  3185.     BRA.S    ndeadd2
  3186.  
  3187. ndeinse    MOVE.L    (A5),A2
  3188.     MOVE    16(A5),D0
  3189.     MULU    #36,D0
  3190.     ADD    D0,A2
  3191.     MOVE.L    A2,A3
  3192.     LEA    36(A3),A3
  3193. nde3loop
  3194.     MOVE    -(A2),-(A3)
  3195.     CMP.L    A2,A1
  3196.     BNE.S    nde3loop
  3197.     BRA.S    ndeadd2
  3198.  
  3199. ndeadd1    MOVE.L    (A5),A1            ; Put new filename into list
  3200. ndeadd2    LEA    FIB_FileName,A0
  3201.     MOVE.L    A1,A3
  3202.     MOVEQ    #35,D0             ; Clear old filename
  3203. nde4loop
  3204.     CLR.B    (A3)+
  3205.     DBF    D0,nde4loop
  3206.     MOVE    FIB_DateStamp+ds_Days+2,30(A1)
  3207.     MOVEQ    #-1,D0
  3208.     TST.L    FIB_EntryType
  3209.     BPL    ndefskp
  3210.     MOVE.L    FIB_FileSize,D0
  3211. ndefskp    MOVE.L    D0,32(A1)
  3212.     MOVEQ    #29,D0             ; Copy new filename
  3213. nde4loop2
  3214.     MOVE.B    (A0)+,D1
  3215.     MOVE.B    D1,(A1)+
  3216.     TST.B    D1
  3217.     BEQ.S    nde4skip
  3218.     DBF    D0,nde4loop2
  3219. nde4skip
  3220.     ADDQ    #1,16(A5)    ; Files + 1
  3221.     RTS
  3222.  
  3223. RedrawFileNames
  3224.     MOVE    D0,-(SP)
  3225.     BSR    ShowDirPath
  3226.     MOVE    (SP)+,D0
  3227.     MOVE    D0,FileNameScrollPos
  3228.     TST    16(A5)
  3229.     BEQ    Return1
  3230.     MOVE.L    #1881,A6
  3231.     MOVE    A6,TextOffset
  3232.     MOVE.L    (A5),D6
  3233.     MULU    #36,D0
  3234.     ADD.L    D0,D6
  3235.     MOVE    16(A5),D0
  3236.     SUB    FileNameScrollPos,D0
  3237.     CMP    #8,D0
  3238.     BHS.S    ShowFileNames
  3239.     SUBQ    #1,D0
  3240.     MOVE    D0,D7
  3241.     BRA.S    sfnloop
  3242.  
  3243. ShowFileNames
  3244.     MOVE    #$91,D0
  3245.     BSR    WaitForVBlank
  3246.     MOVEQ    #7,D7
  3247. sfnloop    MOVE    A6,TextOffset
  3248.     MOVE.L    D6,A0
  3249.     MOVEQ    #0,D0
  3250.     MOVE    30(A0),D0
  3251.     BSR    CalculateDate
  3252.     MOVE    TheDay(PC),WordNumber
  3253.     JSR    Print2DecDigits
  3254.     MOVE    TheMonth(PC),WordNumber
  3255.     JSR    Print2DecDigits
  3256.     MOVE    TheYear(PC),WordNumber
  3257.     JSR    Print2DecDigits
  3258.     ADDQ    #1,TextOffset
  3259.     MOVE.L    D6,ShowTextPtr
  3260.     MOVE    #24,TextLength
  3261.     TST    DirPathNum
  3262.     BNE.S    sfnskip
  3263.     TST.B    ModOnlyFlag
  3264.     BEQ.S    sfnskip
  3265.     MOVE.L    D6,A0
  3266.     CMP.L    #"mod.",(A0)
  3267.     BNE.S    sfnskip
  3268.     ADDQ.L    #4,ShowTextPtr
  3269. sfnskip    JSR    SpaceShowText
  3270.     LEA    32(A6),A6
  3271.     MOVE    A6,TextOffset
  3272.     MOVE.L    D6,A0
  3273.     MOVE.L    32(A0),D1
  3274.     BMI.S    sfndir
  3275.     TST.B    ShowDecFlag
  3276.     BNE.S    sfndec
  3277.     SWAP    D1
  3278.     AND    #$000F,D1
  3279.     BSR    ShowOneDigit
  3280.     MOVE.L    D6,A0
  3281.     MOVE    34(A0),WordNumber
  3282.     JSR    PrintHexWord
  3283. sfnend    ADD.L    #36,D6
  3284.     LEA    208(A6),A6
  3285.     DBF    D7,sfnloop
  3286.     RTS
  3287.  
  3288. sfndec    MOVE.L    D1,D0
  3289.     SUBQ    #1,TextOffset
  3290.     JSR    Print6DecDigits
  3291.     BRA.S    sfnend
  3292.  
  3293. sfndir    MOVE.L    #DirText,ShowTextPtr
  3294.     SUBQ    #1,TextOffset
  3295.     MOVE    #6,TextLength
  3296.     JSR    ShowText
  3297.     BRA.S    sfnend
  3298.  
  3299. ClrFileText    dc.b "    "
  3300.  
  3301. CalculateDate
  3302.     DIVU    #1461,D0
  3303.     LSL    #2,D0
  3304.     MOVE    D0,TheYear
  3305.     CLR    D0
  3306.     SWAP    D0
  3307.     CMP    #789,D0
  3308.     BEQ.S    cadleap
  3309.     BLO.S    cadskp2
  3310.     SUBQ    #1,D0
  3311. cadskp2    DIVU    #365,D0
  3312.     MOVE.L    D0,D1
  3313.     SWAP    D1
  3314.     CMP    #4,D0
  3315.     BLO.S    cadskip
  3316.     SUBQ    #1,D0
  3317. cadskip    ADD    D0,TheYear
  3318.     LEA    MonthTable(PC),A1
  3319.     MOVEQ    #24,D0
  3320. cadloop    SUBQ    #2,D0
  3321.     MOVE    (A1,D0.W),D2
  3322.     CMP    D2,D1
  3323.     BHS.S    cadskp3
  3324.     TST    D0
  3325.     BNE.S    cadloop
  3326. cadskp3    LSR    #1,D0
  3327.     ADDQ    #1,D0
  3328.     MOVE    D0,TheMonth
  3329.     SUB    D2,D1
  3330.     ADDQ    #1,D1
  3331.     MOVE    D1,TheDay
  3332. cadend    MOVEQ    #0,D0
  3333.     MOVE    TheYear(PC),D0
  3334.     ADD    #78,D0
  3335.     DIVU    #100,D0
  3336.     SWAP    D0
  3337.     MOVE    D0,TheYear
  3338.     RTS
  3339. cadleap    ADD    #2,TheYear
  3340.     MOVE    #2,TheMonth
  3341.     MOVE    #29,TheDay
  3342.     BRA    cadend
  3343.  
  3344. TheYear        dc.w 0
  3345. TheMonth    dc.w 0
  3346. TheDay        dc.w 0
  3347. MonthTable    dc.w 0,31,59,90,120,151,181,212,243,273,304,334
  3348. DirText        dc.b " (DIR)"
  3349.  
  3350.  
  3351. ;--------------------------- Play Song --------------------------------
  3352. PlaySong
  3353.     MOVEQ    #0,D0
  3354. SongFrom
  3355.     BSR    StopIt
  3356.     BTST    #2,$DFF016
  3357.     BNE.S    sofr1
  3358.     MOVE    PlayFromPos,D0
  3359. sofr1    MOVE    D0,ScrPattPos
  3360.     LSL    #4,D0
  3361.     AND.L    #$FFFF,D0
  3362.     MOVE.L    D0,PatternPosition
  3363. wfbu1    BTST    #6,$BFE001
  3364.     BEQ.S    wfbu1
  3365.     CLR.B    RawKeyCode
  3366.     CLR.B    SaveKey
  3367.     BSR    SetPlayPtrCol
  3368.     CLR    PatternTicks
  3369.     CLR.L    TimerTicks
  3370.     MOVE.L    #'patp',RunMode
  3371.     CLR    DidQuantize
  3372.     MOVE.L    #-1,LongFFFF
  3373.     BSR    SetScrPatternPos
  3374. SetPlayPosition
  3375.     MOVE.L    CurrPos,D0
  3376.     MOVE.L    SongDataPtr,A0
  3377.     CMP.B    sd_numofpatt(A0),D0
  3378.     BHS    SongPosToZero
  3379.     MOVE.L    CurrPos,SongPosition
  3380.     RTS
  3381.  
  3382. ContPlaySong
  3383.     LEA    ContPlayText(pc),A0
  3384.     JSR    ShowStatusText
  3385.     BSR    StopIt
  3386.     MOVE    ScrPattPos,D0
  3387.     LSL    #4,D0
  3388.     AND.L    #$FFFF,D0
  3389.     MOVE.L    D0,PatternPosition
  3390.     BRA    wfbu1
  3391.  
  3392. ContPlayPatt
  3393.     LEA    ContPattText(pc),A0
  3394.     JSR    ShowStatusText
  3395.     BSR    StopIt
  3396.     MOVE    ScrPattPos,D0
  3397.     LSL    #4,D0
  3398.     AND.L    #$FFFF,D0
  3399.     MOVE.L    D0,PatternPosition
  3400.     BRA    wfbu2
  3401.  
  3402. ContRecPatt
  3403.     LEA    ContRecText(pc),A0
  3404.     JSR    ShowStatusText
  3405.     TST    SamScrEnable
  3406.     BNE    Return1
  3407.     BSR    StopIt
  3408.     MOVE    ScrPattPos,D0
  3409.     LSL    #4,D0
  3410.     AND.L    #$FFF,D0
  3411.     MOVE.L    D0,PatternPosition
  3412.     BRA    wfbu3
  3413.  
  3414. SongPosToZero
  3415.     CLR.L    SongPosition
  3416.     CLR.L    CurrPos
  3417.     RTS
  3418.  
  3419. ;----------------------- Play Pattern ---------------------
  3420. PlayPattern
  3421.     MOVEQ    #0,D0
  3422. PattFrom
  3423.     BSR    StopIt
  3424.     BTST    #2,$DFF016
  3425.     BNE.S    pafr1
  3426.     MOVE    PlayFromPos,D0
  3427. pafr1    MOVE    D0,ScrPattPos
  3428.     LSL    #4,D0
  3429.     AND.L    #$FFF,D0
  3430.     MOVE.L    D0,PatternPosition
  3431. wfbu2    BTST    #6,$BFE001
  3432.     BEQ.S    wfbu2
  3433.     CLR.B    RawKeyCode
  3434.     CLR.B    SaveKey
  3435.     MOVE.L    #'patt',RunMode
  3436.     BSR    SetPlayPtrCol
  3437. ResetPosition
  3438.     MOVE.L    PatternNumber,SongPosition
  3439.     RTS
  3440.  
  3441. ;------------------- Record Pattern/Song --------------------
  3442. RecordPattern
  3443.     MOVEQ    #0,D0
  3444. RecordFrom
  3445.     TST    SamScrEnable
  3446.     BNE    Return1
  3447.     BSR    StopIt
  3448.     BTST    #2,$DFF016
  3449.     BNE.S    refr1
  3450.     MOVE    PlayFromPos,D0
  3451. refr1    MOVE    D0,ScrPattPos
  3452.     LSL    #4,D0
  3453.     AND.L    #$FFF,D0
  3454.     MOVE.L    D0,PatternPosition
  3455. wfbu3    BTST    #6,$BFE001
  3456.     BEQ.S    wfbu3
  3457.     BSR    SetEditPtrCol
  3458.     CLR.B    RawKeyCode
  3459.     CLR.B    SaveKey
  3460.     BSR    SaveUndo
  3461.     MOVE.L    #'edit',EditMode
  3462.     MOVE.L    #'patt',RunMode
  3463.     TST.B    RecordMode
  3464.     BEQ.S    ResetPosition
  3465.     MOVE.L    #'patp',RunMode
  3466.     BRA    SetPlayPosition
  3467.  
  3468.  
  3469.  
  3470. ;------------------- Show Main Screen --------------------
  3471. DisplayMainScreen
  3472.     CLR    BlockMarkFlag
  3473.     MOVE    #1,CurrScreen
  3474.     SF    NoSampleInfo
  3475.     TST    LoadInProgress
  3476.     BNE.S    dmsskp3
  3477.     BSR    SetNormalPtrCol
  3478.     TST    RunMode
  3479.     BEQ.S    dmsskip
  3480.     BSR    SetPlayPtrCol
  3481. dmsskip    TST.L    EditMode
  3482.     BEQ.S    dmsskp2
  3483.     BSR    SetEditPtrCol
  3484. dmsskp2    BSR    StorePtrCol
  3485. dmsskp3    ST    DisableAnalyzer
  3486.     BSR    ClearAnaHeights
  3487.     BSR    ClearRightArea
  3488.  
  3489.     LEA    BitPlaneData+TopMenusPos,A0
  3490.     LEA    TopMenusBuffer,A1
  3491.     MOVEQ    #44-1,D0
  3492. cgloop4    MOVEQ    #25-1,D1
  3493. cgloop5    MOVE.B    (A1)+,(A0)+
  3494.     MOVE.B    1099(A1),PlaneSize-1(A0)
  3495.     DBF    D1,cgloop5
  3496.     LEA    15(A0),A0
  3497.     DBF    D0,cgloop4
  3498.  
  3499.     BSR    RedrawToggles
  3500.     TST.B    EdEnable
  3501.     BNE    EditOp
  3502.     MOVEQ    #0,D4
  3503. RedrawAnaScope
  3504.     MOVE    #145,D0
  3505.     BSR    WaitForVBlank
  3506.     SF    ScopeEnable
  3507.     ST    DisableAnalyzer
  3508.     BSR    ClearRightArea
  3509.     LEA    SpectrumAnaData,A0
  3510.     TST.B    AnaScopFlag
  3511.     BEQ.S    cgjojo
  3512.     LEA    ScopeData,A0
  3513.  
  3514. cgjojo    BSR    Decompact
  3515.     BEQ    cgjaja
  3516.  
  3517.     LEA    BitPlaneData+SpectrumAnaPos,A0
  3518.     MOVEQ    #1,D7
  3519. cgloop1    MOVEQ    #55-1,D6    ; 55 lines in picture.
  3520. cgloop2    MOVEQ    #25-1,D5    ; 25 bytes(x8)
  3521. cgloop3    MOVE.B    (A1)+,(A0)+
  3522.     DBF    D5,cgloop3
  3523.     ADDQ.L    #1,A1
  3524.     LEA    15(A0),A0
  3525.     DBF    D6,cgloop2
  3526.     LEA    $1F68(A0),A0
  3527.     DBF    D7,cgloop1
  3528.  
  3529.     BSR    FreeDecompMem
  3530. cgjaja                    ;TST.L    D4    ;fuks up with this
  3531.                     ;BNE    Return1
  3532.     TST.B    AnaScopFlag
  3533.     BNE    cgscope
  3534.     BSR    ClearAnaHeights
  3535.     BSR    ClearRightArea
  3536.     SF    DisableAnalyzer
  3537.     BRA    SetAnalyzerColors
  3538. cgscope    ST    ScopeEnable
  3539.     BSR    ClearAnalyzerColors
  3540.     BSR    RedrawPitchCtrl
  3541.     RTS
  3542.  
  3543.  
  3544.  
  3545.  
  3546. ;---- Clear Areas ----
  3547. ClearFileNames
  3548.     MOVE    #145,D0
  3549.     BSR    WaitForVBlank
  3550.     MOVE.L    TextBplPtr,A1
  3551.     LEA    1800(A1),A1
  3552.     MOVE    #550-1,D0
  3553.     MOVEQ    #0,D1
  3554. cfnloop    MOVE.L    D1,(A1)+
  3555.     DBF    D0,cfnloop
  3556.     RTS
  3557.  
  3558. ClearRightArea
  3559.     MOVE.L    TextBplPtr,A0
  3560.     LEA    ScreenWidth+15(A0),A0
  3561.     MOVEQ    #0,D2
  3562.     MOVEQ    #99-1,D0
  3563. cnblloop1    MOVEQ    #25-1,D1
  3564. cnblloop2    MOVE.B    D2,(A0)+
  3565.         DBF    D1,cnblloop2
  3566.     LEA    15(A0),A0
  3567.     DBF    D0,cnblloop1
  3568.     RTS
  3569.  
  3570. Clear100Lines
  3571.     MOVE.L    TextBplPtr,A0
  3572.     MOVE    #(ScreenWidth*25)-1,D0
  3573.     MOVEQ    #0,D1
  3574. chlloop    MOVE.L    D1,(A0)+
  3575.     DBF    D0,chlloop
  3576.     RTS
  3577.  
  3578. ;---- Are You Sure Requester ----
  3579.  
  3580. AreYouSure
  3581.     MOVE.B    DisableAnalyzer,SaveDA
  3582.     MOVE.B    ScopeEnable,SaveScope
  3583.     SF    ScopeEnable
  3584.     JSR    ShowStatusText
  3585.     BSR    StorePtrCol
  3586.     BSR    SetWaitPtrCol
  3587.     JSR    Wait_4000
  3588.     CMP    #1,CurrScreen
  3589.     BNE.S    aysskip
  3590.     TST.B    DisableAnalyzer
  3591.     BNE.S    aysskip
  3592.     ST     DisableAnalyzer
  3593.     BSR    ClearAnaHeights
  3594.     BSR    ClearRightArea
  3595. aysskip    LEA    SureBoxData,A1
  3596.     BSR    SwapBoxMem
  3597.     BSR    WaitForButtonUp
  3598.     JSR    Wait_4000
  3599.     CLR.B    RawKeyCode
  3600. surebuttoncheck
  3601.     BTST    #2,$DFF016
  3602.     BEQ.S    SureAnswerNo
  3603.     BSR    DoKeyBuffer
  3604.     MOVE.B    RawKeyCode,D0
  3605.     CMP.B    #21,D0        ; Pressed Y
  3606.     BEQ    SureAnswerYes
  3607.     CMP.B    #68,D0        ; Pressed Return
  3608.     BEQ    SureAnswerYes
  3609.     CMP.B    #54,D0        ; Pressed N
  3610.     BEQ.S    SureAnswerNo
  3611.     CMP.B    #69,D0        ; Pressed Esc
  3612.     BEQ.S    SureAnswerNo
  3613.     BTST    #6,$BFE001    ; Left Mousebutton
  3614.     BNE.S    surebuttoncheck
  3615.     MOVEM.W    MouseX,D0/D1
  3616.     CMP    #$AB,D0
  3617.     BLO.S    surebuttoncheck
  3618.     CMP    #$FC,D0
  3619.     BHI.S    surebuttoncheck
  3620.     CMP    #$48,D1
  3621.     BLO.S    surebuttoncheck
  3622.     CMP    #$52,D1
  3623.     BHI.S    surebuttoncheck
  3624.     CMP    #$C5,D0
  3625.     BLO.S    SureAnswerYes
  3626.     CMP    #$EA,D0
  3627.     BLO.S    surebuttoncheck
  3628. SureAnswerNo
  3629.     LEA    SureBoxData,A1
  3630.     BSR    SwapBoxMem
  3631.     JSR    ShowAllRight
  3632.     BSR    ClearAnaHeights
  3633.     MOVE.B    SaveDA,DisableAnalyzer
  3634.     MOVE.B    SaveScope,ScopeEnable
  3635.     BSR    ErrorRestoreCol
  3636.     BSR    WaitForButtonUp
  3637.     JSR    Wait_4000
  3638.     CLR.B    RawKeyCode
  3639.     MOVEQ    #-1,D0
  3640.     RTS
  3641.  
  3642. SureAnswerYes
  3643.     LEA    SureBoxData,A1
  3644.     BSR    SwapBoxMem
  3645.     JSR    ShowAllRight
  3646.     BSR    ClearAnaHeights
  3647.     MOVE.B    SaveDA,DisableAnalyzer
  3648.     MOVE.B    SaveScope,ScopeEnable
  3649.     BSR    RestorePtrCol
  3650.     BSR    WaitForButtonUp
  3651.     JSR    Wait_4000
  3652.     CLR.B    RawKeyCode
  3653.     MOVEQ    #0,D0
  3654.     RTS
  3655.  
  3656. SwapBoxMem
  3657.     LEA    BitPlaneData+SureBoxPos,A0
  3658.     MOVEQ    #38,D0
  3659. ssbmloop1
  3660.     MOVEQ    #12,D1
  3661. ssbmloop2
  3662.     MOVE.B    PlaneSize(A0),D2
  3663.     MOVE.B    546(A1),PlaneSize(A0)
  3664.     MOVE.B    D2,546(A1)
  3665.     MOVE.B    (A0),D2
  3666.     MOVE.B    (A1),(A0)+
  3667.     MOVE.B    D2,(A1)+
  3668.     DBF    D1,ssbmloop2
  3669.     LEA    27(A0),A0
  3670.     ADDQ.L    #1,A1
  3671.     DBF    D0,ssbmloop1
  3672.     MOVE.L    TextBplPtr,A0    ; Swap text...
  3673.     LEA    SureBoxPos(A0),A0
  3674.     LEA    TextDataBuffer,A1
  3675.     MOVEQ    #38,D0
  3676. ssbmloop3
  3677.     MOVEQ    #12,D1
  3678. ssbmloop4
  3679.     MOVE.B    (A0),D2
  3680.     MOVE.B    (A1),(A0)+
  3681.     MOVE.B    D2,(A1)+
  3682.     DBF    D1,ssbmloop4
  3683.     LEA    27(A0),A0
  3684.     ADDQ.L    #1,A1
  3685.     DBF    D0,ssbmloop3
  3686.     RTS
  3687.  
  3688. WaitForButtonUp
  3689.     BTST    #6,$BFE001    ; Check Left Mousebutton
  3690.     BEQ.S    WaitForButtonUp
  3691.     BTST    #2,$DFF016    ; Check Right Mousebutton
  3692.     BEQ.S    WaitForButtonUp
  3693.     MOVE    #$91,D0
  3694. WaitForVBlank
  3695.     MOVE.L    $DFF004,D1
  3696.     LSR.L    #8,D1
  3697.     AND    #$1FF,D1
  3698.     CMP    D1,D0
  3699.     BNE.S    WaitForVBlank
  3700.     RTS
  3701.  
  3702.  
  3703.  
  3704. ;---- Set Pointercolors ----
  3705.  
  3706. SetDeletePtrCol
  3707.     MOVE.L    A6,-(SP)
  3708.     MOVE.L    CopListColorPtr,A6
  3709.     MOVE    #$077,2(A6)
  3710.     MOVE    #$044,6(A6)
  3711.     MOVE    #$0DD,10(A6)
  3712.     MOVE.L    (SP)+,A6
  3713.     RTS
  3714.  
  3715. SetNormalPtrCol
  3716.     MOVE.L    A6,-(SP)
  3717.     MOVE.L    CopListColorPtr,A6
  3718.     MOVE    #$777,2(A6)
  3719.     MOVE    #$444,6(A6)
  3720.     MOVE    #$DDD,10(A6)
  3721.     MOVE.L    (SP)+,A6
  3722.     RTS
  3723.  
  3724. SetDiskPtrCol
  3725.     MOVE.L    A6,-(SP)
  3726.     MOVE.L    CopListColorPtr,A6
  3727.     MOVE    #$070,2(A6)
  3728.     MOVE    #$040,6(A6)
  3729.     MOVE    #$0D0,10(A6)
  3730.     MOVE.L    (SP)+,A6
  3731.     RTS
  3732.  
  3733. SetPlayPtrCol
  3734.     MOVE.L    A6,-(SP)
  3735.     MOVE.L    CopListColorPtr,A6
  3736.     MOVE    #$770,2(A6)
  3737.     MOVE    #$440,6(A6)
  3738.     MOVE    #$DD0,10(A6)
  3739.     MOVE.L    (SP)+,A6
  3740.     RTS
  3741.  
  3742. SetEditPtrCol
  3743.     MOVE.L    A6,-(SP)
  3744.     MOVE.L    CopListColorPtr,A6
  3745.     MOVE    #$05A,2(A6)
  3746.     MOVE    #$006,6(A6)
  3747.     MOVE    #$08f,10(A6)
  3748.     MOVE.L    (SP)+,A6
  3749.     RTS
  3750.  
  3751. SetWaitPtrCol
  3752.     MOVE.L    A6,-(SP)
  3753.     MOVE.L    CopListColorPtr,A6
  3754.     MOVE    #$727,2(A6)
  3755.     MOVE    #$404,6(A6)
  3756.     MOVE    #$F7F,10(A6)
  3757.     MOVE.L    (SP)+,A6
  3758.     RTS
  3759.  
  3760. SetErrorPtrCol
  3761.     MOVE.L    A6,-(SP)
  3762.     MOVE.L    CopListColorPtr,A6
  3763.     MOVE    #$C02,2(A6)
  3764.     MOVE    #$400,6(A6)
  3765.     MOVE    #$F03,10(A6)
  3766.     MOVE.L    (SP)+,A6
  3767.     MOVE    #1,UpdateFreeMem
  3768.     BSR    WaitALittle
  3769.     JSR    ShowAllRight
  3770.     BSR    SetNormalPtrCol
  3771.     MOVEQ    #0,D0
  3772.     RTS
  3773.  
  3774. WaitALittle
  3775.     MOVE    WaitTime(PC),D1
  3776. errorwaitloop
  3777.     JSR    Wait_4000
  3778.     DBF    D1,errorwaitloop
  3779.     MOVE    #23,WaitTime
  3780.     RTS
  3781.  
  3782. WaitTime
  3783.     dc.w 23
  3784.  
  3785. StorePtrCol
  3786.     MOVE.L    A6,-(SP)
  3787.     MOVE.L    CopListColorPtr,A6
  3788.     MOVE    2(A6),PointerCol1Save
  3789.     MOVE    6(A6),PointerCol2Save
  3790.     MOVE    10(A6),PointerCol3Save
  3791.     MOVE.L    (SP)+,A6
  3792.     RTS
  3793.  
  3794. ErrorRestoreCol
  3795.     BSR    SetErrorPtrCol
  3796. RestorePtrCol
  3797.     MOVE.L    A6,-(SP)
  3798.     MOVE    #1,UpdateFreeMem
  3799.     MOVE.L    CopListColorPtr,A6
  3800.     MOVE    PointerCol1Save,2(A6)
  3801.     MOVE    PointerCol2Save,6(A6)
  3802.     MOVE    PointerCol3Save,10(A6)
  3803.     MOVE.L    (SP)+,A6
  3804.     RTS
  3805.  
  3806.  
  3807.  
  3808.  
  3809.  
  3810.  
  3811.  
  3812. ;---- Check special keys ----        (SPICE)
  3813. CheckPlayKeys
  3814.     MOVE.B    RawKeyCode,D0
  3815.     CMP.B    #101,D0
  3816.     BEQ    SerialPlaySong            ;-
  3817.     CMP.B    #103,D0
  3818.     BEQ    SerialPlayPattern        ;-
  3819.     CMP.B    #64,D0
  3820.     BNE.S    cpkskip
  3821.     TST.L    RunMode
  3822.     BNE    SerialStopIt            ;-
  3823.     TST.L    EditMode
  3824.     BEQ    .Edit                ;-
  3825.         LEA    NormalStopText(pc),A0
  3826.         JSR    ShowStatusText
  3827.         BRA    StopIt
  3828. .Edit        LEA    NormalEditText(pc),A0
  3829.         JSR    ShowStatusText
  3830.         BRA    Edit
  3831. cpkskip    CMP.B    #97,D0
  3832.     BEQ    SerialRecordPattern            ;-
  3833.     CMP.B    #69,D0
  3834.     BEQ    EscPressed
  3835.     CMP.B    #66,D0
  3836.     BEQ    TabulateCursor
  3837.     CMP.B    #127,D0
  3838.     BEQ    GotoCLI
  3839.     CMP.B    #48,D0
  3840.     BEQ    TurnOffVoices
  3841.     CMP.B    #60,D0
  3842.     BEQ    KillSample
  3843.     CMP.B    #13,D0
  3844.     BEQ    togglepnote
  3845.  
  3846.     CMP.B    #67,D0
  3847.     BEQ.S    HigherInstr
  3848.     CMP.B    #67+128,D0
  3849.     BEQ.S    LowerInstr
  3850.     MOVE    HiLowInstr,D1
  3851.     LEA    kpinstable(PC),A0
  3852.     MOVEQ    #0,D2
  3853. kpinsloop
  3854.     CMP.B    (A0,D2.W),D0
  3855.     BEQ.S    kpinsfound
  3856.     ADDQ    #1,D2
  3857.     CMP    #16,D2
  3858.     BLO.S    kpinsloop
  3859.     RTS
  3860.  
  3861. kpinsfound
  3862.     ADD    D2,D1
  3863.     BEQ.S    insnull
  3864.     BRA.S    redrsa2
  3865.  
  3866. LowerInstr
  3867.     CLR    HiLowInstr
  3868.     RTS
  3869. HigherInstr
  3870.     MOVE    #16,HiLowInstr
  3871.     MOVE    #16,D1
  3872.     BRA.S    redrsa2
  3873.  
  3874. redrsa3    MOVE    D1,InsNum
  3875. redrsam    CLR.B    RawKeyCode
  3876.     CLR.L    SavSamInf
  3877.     JSR    ShowSampleInfo
  3878.     JMP    RedrawSample
  3879.  
  3880. insnull    TST    InsNum
  3881.     BEQ.S    insnul2
  3882.     MOVE    InsNum,LastInsNum
  3883.     CLR    InsNum
  3884.     MOVEQ    #0,D1
  3885.     BRA.S    redrsa2
  3886.  
  3887. insnul2    JMP    ShowSampleInfo
  3888.  
  3889. kpinstable
  3890.     dc.b 15,90,91,92
  3891.     dc.b 93,61,62,63,74
  3892.     dc.b 45,46,47,94,29,30
  3893.     dc.b 31
  3894.  
  3895. redrsa2    TST.B    pnoteflag
  3896.     BEQ.S    redrsa3
  3897.     CLR.B    RawKeyCode
  3898.     TST    AltKeyStatus
  3899.     BNE.S    setpnote
  3900.     MOVE    D1,InsNum
  3901.     JSR    ShowSampleInfo
  3902.     MOVE    InsNum,D0
  3903.     ADD    D0,D0
  3904.     MOVE    pnotetable(PC,D0.W),D0
  3905.     MOVEQ    #-1,D2
  3906.     BSR    playtheinstr
  3907.     JMP    RedrawSample
  3908.  
  3909. pnotetable
  3910.     dc.w 24,24,24,24,24,24,24,24,24,24
  3911.     dc.w 24,24,24,24,24,24,24,24,24,24
  3912.     dc.w 24,24,24,24,24,24,24,24,24,24
  3913.     dc.w 24,24
  3914.  
  3915. setpnote
  3916.     ADD    D1,D1
  3917.     LEA    pnotetable(PC,D1.W),A0
  3918.     MOVE.L    A0,SplitAddress
  3919.     MOVE    #4,SamNoteType
  3920.     LEA    selnotetext(PC),A0
  3921.     JMP    ShowStatusText
  3922.  
  3923. selnotetext    dc.b "select note",0
  3924.  
  3925. togglepnote
  3926.     CLR.B    RawKeyCode
  3927.     MOVEQ    #0,D0
  3928.     MOVE.B    pnoteflag,D0
  3929.     ADDQ.B    #1,D0
  3930.     CMP.B    #3,D0
  3931.     BLO.S    tpnskp
  3932.     MOVEQ    #0,D0
  3933. tpnskp    MOVE.B    D0,pnoteflag
  3934.     LEA    pnotechar(PC,D0.W),A0
  3935.     MOVEQ    #1,D0
  3936.     MOVE    #5159,D1
  3937.     JMP    ShowText3
  3938.  
  3939. pnotechar    dc.b 32,128,129
  3940. pnoteflag    dc.b 0
  3941.  
  3942. ;---- Check transpose keys ----
  3943.  
  3944. CheckTransKeys
  3945.     TST    LeftAmigaStatus
  3946.     BEQ    Return1
  3947.     MOVE    PattCurPos,D0
  3948.     BSR    GetPositionPtr
  3949.     MOVE.B    RawKeyCode,D1
  3950.     CLR.B    RawKeyCode
  3951.     MOVE.B    SampleAllFlag,-(SP)
  3952.     BSR.S    ctksub
  3953.     MOVE.B    (SP)+,SampleAllFlag
  3954.     RTS
  3955.  
  3956. ctksub    MOVEQ    #0,D0
  3957.     CLR.B    SampleAllFlag
  3958.     CMP.B    #1,D1
  3959.     BEQ    NoteUp
  3960.     CMP.B    #16,D1
  3961.     BEQ    NoteDown
  3962.     CMP.B    #32,D1
  3963.     BEQ    OctaveUp
  3964.     CMP.B    #49,D1
  3965.     BEQ    OctaveDown
  3966.  
  3967.     MOVE    #300,D0
  3968.     CMP.B    #2,D1
  3969.     BEQ    NoteUp
  3970.     CMP.B    #17,D1
  3971.     BEQ    NoteDown
  3972.     CMP.B    #33,D1
  3973.     BEQ    OctaveUp
  3974.     CMP.B    #50,D1
  3975.     BEQ    OctaveDown
  3976.  
  3977.     MOVEQ    #0,D0
  3978.     MOVE.B    #1,SampleAllFlag
  3979.     CMP.B    #3,D1
  3980.     BEQ    NoteUp
  3981.     CMP.B    #18,D1
  3982.     BEQ    NoteDown
  3983.     CMP.B    #34,D1
  3984.     BEQ    OctaveUp
  3985.     CMP.B    #51,D1
  3986.     BEQ    OctaveDown
  3987.  
  3988.     MOVE    #300,D0
  3989.     CMP.B    #4,D1
  3990.     BEQ    NoteUp
  3991.     CMP.B    #19,D1
  3992.     BEQ    NoteDown
  3993.     CMP.B    #35,D1
  3994.     BEQ    OctaveUp
  3995.     CMP.B    #52,D1
  3996.     BEQ    OctaveDown
  3997.     RTS
  3998.  
  3999. ;---- Check control keys ----
  4000.  
  4001. CheckCtrlKeys
  4002.     TST    CtrlKeyStatus
  4003.     BEQ    Return1
  4004.     MOVEQ    #0,D0
  4005.     MOVE.B    RawKeyCode,D0
  4006.     CMP.B    #35,D0 ; F
  4007.     BEQ    ToggleFilter
  4008.     CMP.B    #33,D0 ; S
  4009.     BEQ    ToggleSplit
  4010.     CMP.B    #55,D0 ; M
  4011.     BEQ    ToggleMultiMode
  4012.     CMP.B    #16,D0 ; Q
  4013.     BEQ    UnmuteAll
  4014.     CMP.B    #32,D0 ; A
  4015.     BEQ    ToggleMute
  4016.     CMP.B    #49,D0 ; Z
  4017.     BEQ    RestoreEffects
  4018.     CMP.B    #19,D0 ; R
  4019.     BEQ    RestoreFKeyPos
  4020.     CMP.B    #20,D0 ; T
  4021.     BEQ    SwapTrack
  4022.  
  4023.     CMP.B    #53,D0 ; B
  4024.     BEQ    BeginBlock
  4025.     CMP.B    #51,D0 ; C
  4026.     BEQ    CopyBlock
  4027.     CMP.B    #50,D0 ; X
  4028.     BEQ    CutBlock
  4029.     CMP.B    #34,D0 ; D
  4030.     BEQ    DeleteBlock
  4031.     CMP.B    #25,D0 ; P
  4032.     BEQ    PasteBlock
  4033.     CMP.B    #23,D0 ; I
  4034.     BEQ    InsertBlock
  4035.     CMP.B    #38,D0 ; J
  4036.     BEQ    JoinPasteBlock
  4037.     CMP.B    #54,D0 ; N
  4038.     BEQ    Re_MarkBlock
  4039.     CMP.B    #21,D0 ; Y
  4040.     BEQ    BackwardsBlock
  4041.     CMP.B    #17,D0 ; W
  4042.     BEQ    PolyphonizeBlock
  4043.  
  4044.     CMP.B    #18,D0 ; E
  4045.     BEQ    ExpandTrack
  4046.     CMP.B    #24,D0 ; O
  4047.     BEQ    ContractTrack
  4048.     CMP.B    #37,D0 ; H
  4049.     BEQ    TransBlockUp
  4050.     CMP.B    #40,D0 ; L
  4051.     BEQ    TransBlockDown
  4052.     CMP.B    #39,D0 ; K
  4053.     BEQ    KillToEndOfTrack
  4054.     CMP.B    #22,D0 ; U
  4055.     BEQ    UndoLastChange
  4056.  
  4057.     CMP.B    #68,D0 ; CR
  4058.     BEQ    InsCmdTrack
  4059.     CMP.B    #65,D0 ; Del
  4060.     BEQ    DelCmdTrack
  4061.     CMP.B    #36,D0 ; G
  4062.     BEQ    BoostAll
  4063.     CMP.B    #52,D0 ; V
  4064.     BEQ    FilterAll
  4065.  
  4066.     CMP.B    #1,D0
  4067.     BLO    Return1
  4068.     CMP.B    #10,D0
  4069.     BHI    Return1
  4070.     BNE.S    cckskip
  4071.     MOVEQ    #0,D0
  4072. cckskip    MOVE    D0,EditMoveAdd
  4073.     CLR.B    RawKeyCode
  4074.     ADD.B    #'0',D0
  4075.     LEA    ematext(PC),A0
  4076.     MOVE.B    D0,11(A0)
  4077.     JSR    ShowStatusText
  4078.     MOVE    #10,WaitTime
  4079.     BSR    WaitALittle
  4080.     JMP    ShowAllRight
  4081.  
  4082. ematext    dc.b "editskip = 0",0,0
  4083.  
  4084. ;---- Check alt keys ----
  4085.  
  4086. CheckAltKeys
  4087.     TST    AltKeyStatus
  4088.     BEQ    Return1
  4089.     MOVEQ    #0,D0
  4090.     MOVE.B    RawKeyCode,D0
  4091.     CMP.B    #49,D0 ; Z
  4092.     BEQ    ToggleCh1
  4093.     CMP.B    #50,D0 ; X
  4094.     BEQ    ToggleCh2
  4095.     CMP.B    #51,D0 ; C
  4096.     BEQ    ToggleCh3
  4097.     CMP.B    #52,D0 ; V
  4098.     BEQ    ToggleCh4
  4099.     CMP.B    #53,D0 ; B
  4100.     BEQ    Boost
  4101.     CMP.B    #35,D0 ; F
  4102.     BEQ    Filter
  4103.     CMP.B    #20,D0 ; T
  4104.     BEQ.S    xTuningTone
  4105.     CMP.B    #33,D0 ; S
  4106.     BEQ.S    xSamplerScreen
  4107.     CMP.B    #19,D0 ; R
  4108.     BEQ.S    xResample
  4109.     CMP.B    #18,D0 ; E
  4110.     BEQ    DoEditOp
  4111.     CMP.B    #23,D0 ; I
  4112.     BEQ.S    AutoInsert
  4113.     CMP.B    #34,D0 ; D
  4114.     BEQ    DiskOp
  4115.     CMP.B    #39,D0 ; K
  4116.     BEQ    KillInstrTrack
  4117. ;    CMP.B    #17,D0 ; W
  4118. ;    BEQ.S    WaitForNote
  4119.     CMP.B    #32,D0 ; A
  4120.     BEQ.S    xSampler
  4121.     CMP.B    #16,D0 ; Q
  4122.     BEQ    ChkQuit
  4123.     CMP.B    #21,D0 ; Y
  4124.     BEQ    SaveAllSamples
  4125.  
  4126. ;    CMP.B    #24,D0 ; O
  4127. ;    CMP.B    #55,D0 ; M
  4128. ;    CMP.B    #25,D0 ; P
  4129. ;    CMP.B    #38,D0 ; J
  4130. ;    CMP.B    #54,D0 ; N
  4131. ;    CMP.B    #37,D0 ; H
  4132. ;    CMP.B    #40,D0 ; L
  4133. ;    CMP.B    #22,D0 ; U
  4134. ;    CMP.B    #36,D0 ; G
  4135.     RTS
  4136.  
  4137. xTuningTone    JMP    TuningTone
  4138. xSamplerScreen    JMP    SamplerScreen
  4139. xResample    JMP    Resample
  4140. xSampler    JMP    Sampler
  4141.  
  4142. AutoInsert
  4143.     CLR.B    RawKeyCode
  4144.     EOR.B    #1,AutoInsFlag
  4145. ShowAutoInsert
  4146.     CMP    #4,CurrScreen
  4147.     BEQ    Return1
  4148.     MOVE.B    #' ',D0
  4149.     TST.B    AutoInsFlag
  4150.     BEQ.S    auins2
  4151.     MOVE.B    #'I',D0
  4152. auins2    MOVE.B    D0,AutoInsText
  4153.     MOVE    #4561,D1
  4154.     MOVEQ    #1,D0
  4155.     LEA    AutoInsText(PC),A0
  4156.     JMP    ShowText3
  4157.  
  4158. AutoInsText    dc.b 0
  4159. AutoInsFlag    dc.b 0
  4160.  
  4161. SaveAllSamples
  4162.     LEA    SaveAllSamplesText,A0
  4163.     BSR    AreYouSure
  4164.     BNE    SetErrorPtrCol
  4165.     MOVE    InsNum,SaveInstr
  4166.     MOVE    #1,InsNum
  4167. .loop    JSR    ShowSampleInfo
  4168.     BSR    dosavesample
  4169.     ADDQ    #1,InsNum
  4170.     CMP    #32,InsNum
  4171.     BLO.S    .loop
  4172.     MOVE    SaveInstr,InsNum
  4173.     JMP    ShowSampleInfo
  4174.  
  4175. SaveAllSamplesText
  4176.     dc.b    "save all samples?",0
  4177.     even
  4178.  
  4179. ;---- Jump between channels ----
  4180.  
  4181. TabulateCursor
  4182.     CLR.B    RawKeyCode
  4183.     TST    ShiftKeyStatus
  4184.     BNE.S    TabCurRight
  4185.     MOVE    PattCurPos,D0
  4186.     DIVU    #6,D0
  4187.     ADDQ    #1,D0
  4188.     CMP    #4,D0        ;channels
  4189.     BNE.S    tacskip
  4190.     MOVEQ    #0,D0
  4191. tacskip    MULU    #6,D0
  4192.     MOVE    D0,PattCurPos
  4193.     BRA    UpdateCursorPos
  4194.  
  4195. TabCurRight
  4196.     MOVE    PattCurPos,D0
  4197.     ADDQ    #5,D0
  4198.     DIVU    #6,D0
  4199.     SUBQ    #1,D0
  4200.     BPL.S    tacskip
  4201.     MOVEQ    #3,D0
  4202.     BRA.S    tacskip
  4203.  
  4204. ;---- Escape was pressed ----
  4205.  
  4206. EscPressed
  4207.     CLR.B    RawKeyCode
  4208.     CLR.B    SaveKey
  4209.     MOVE    CurrScreen,D0
  4210.     CMP    #2,D0
  4211.     BLO.S    BotExit
  4212. TopExit    MOVE    CurrScreen,D0
  4213.     CMP    #2,D0
  4214.     BEQ    ExitHelpScreen
  4215.     CMP    #3,D0
  4216.     BEQ    ExitFromDir
  4217.     CMP    #4,D0
  4218.     BEQ.S    pedexit
  4219.     CMP    #5,D0
  4220.     BEQ    ExitSetup
  4221.     CMP    #6,D0
  4222.     BEQ.S    plstexit
  4223.     CMP    #7,D0
  4224.     BEQ    ExitSetup
  4225.     RTS
  4226.  
  4227. BotExit    TST    SamScrEnable
  4228.     BNE.S    samplerexit
  4229.     TST    BlockMarkFlag
  4230.     BNE    blkunma
  4231.     CMP    #1,CurrScreen
  4232.     BNE    Return1
  4233.     TST.B    EdEnable
  4234.     BNE    ExitEditOp
  4235.     RTS
  4236.  
  4237. samplerexit
  4238.      JMP    ExitFromSam
  4239. pedexit     JMP    PED_Exit
  4240. plstexit JMP    ExitPLST
  4241.  
  4242. GotoCLI    CLR.B    RawKeyCode
  4243.     CLR.B    SaveKey
  4244.     TST.L    RunMode
  4245.     BNE.S    cliskp1
  4246.     BSR    StopIt
  4247.     BSR    ResetMusicInt
  4248. cliskp1    BSR    ResetVBInt
  4249.     BSR    ResetInputHandler
  4250.     BSR    ResetAutoReq
  4251.     BSR    ResetEasyReq
  4252.     BSR    ResetCopList
  4253.     MOVE.L    ExtCmdAddress,D1
  4254.     BEQ.S    gcliskp
  4255.     CLR.L    ExtCmdAddress
  4256.     MOVE.L    ExtCmdWindow,D2
  4257.     MOVEQ    #0,D3
  4258.     MOVE.L    DOSBase,A6
  4259.     JSR    LVOExecute(A6)
  4260. gcliskp    SUB.L    A0,A0
  4261.     LEA    BackToProText(PC),A1
  4262.     LEA    OKGadgetText(PC),A2
  4263.     MOVE.L    A2,A3
  4264.     MOVEQ    #0,D0
  4265.     MOVEQ    #0,D1
  4266.     MOVE    #196,D2
  4267.     MOVEQ    #50,D3
  4268.     MOVE.L    IntuitionBase,A6
  4269.     JSR    LVOAutoRequest(A6)
  4270.     ADDQ.B    #1,LastRawkey
  4271.     TST.L    RunMode
  4272.     BNE.S    cliskp2
  4273.     BSR    SetMusicInt
  4274. cliskp2    BSR    SetVBInt
  4275.     BSR    SetInputHandler
  4276.     BSR    SetAutoReq
  4277.     BSR    SetEasyReq
  4278.     BRA    SetCopList
  4279.  
  4280. BackToProText
  4281.     dc.b 0,1,1,0
  4282.     dc.w 14,6
  4283.     dc.l 0,btptext,0
  4284. btptext dc.b 'Back to Protracker',0,0
  4285.  
  4286. OKGadgetText
  4287.     dc.b 0,1,1,0
  4288.     dc.w 6,3
  4289.     dc.l 0,okgtext,0
  4290. okgtext dc.b 'OK',0,0
  4291.  
  4292. ;---- Check Help Key ----
  4293.  
  4294. HelpSelectText    dc.b    '* help selected *',0
  4295. PLSTSelectText    dc.b    '* plst selected *',0
  4296. PLSTHelpFlag    dc.b    0,0 ; free 0
  4297.  
  4298. CheckHelpKey
  4299.     CMP.B    #95,RawKeyCode    ; Help Key pressed ?
  4300.     BNE    Return1
  4301.     CLR.B    RawKeyCode
  4302.     TST    ShiftKeyStatus
  4303.     BEQ.S    realhlp
  4304.     LEA    HelpSelectText,A0
  4305.     EOR.B    #1,PLSTHelpFlag
  4306.     BEQ.S    chksel
  4307.     LEA    PLSTSelectText,A0
  4308. chksel    JSR    ShowStatusText
  4309.     BSR    WaitALittle
  4310.     JMP    ShowAllRight
  4311.  
  4312. gtoPLST    JMP    PLST
  4313.  
  4314. realhlp    TST.B    PLSTHelpFlag
  4315.     BNE.S    gtoPLST
  4316.     CMP    #2,CurrScreen
  4317.     BEQ    ExitHelpScreen
  4318.     BSR    TopExit
  4319.     MOVE    CurrScreen,SaveCurrScreen
  4320.     SF    ScopeEnable
  4321.     ST     DisableAnalyzer
  4322.     ST    NoSampleInfo
  4323.     BSR    ClearAnalyzerColors
  4324.     BSR    SwapHelpScreen
  4325.     BEQ    exithlp
  4326.     BSR    Clear100Lines
  4327.     TST.L    HelpTextIndex+4
  4328.     BNE.S    chkskip
  4329.     BSR    GetHelpIndex
  4330. chkskip    MOVE.L    #HelpFileName,D1
  4331.     MOVE.L    #1005,D2
  4332.     MOVE.L    DOSBase,A6
  4333.     JSR    LVOOpen(A6)
  4334.     MOVE.L    D0,FileHandle
  4335.     BNE    ShowHelpPage
  4336.     LEA    PTPath,A0
  4337.     BSR    CopyPath
  4338.     LEA    HelpFileName(PC),A0
  4339.     MOVEQ    #7,D0
  4340. hefilop    MOVE.B    (A0)+,(A1)+
  4341.     DBF    D0,hefilop
  4342.     MOVE.L    #FileName,D1
  4343.     MOVE.L    #1005,D2
  4344.     MOVE.L    DOSBase,A6
  4345.     JSR    LVOOpen(A6)
  4346.     MOVE.L    D0,FileHandle
  4347.     BEQ    HelpFileError
  4348.     BRA.S    ShowHelpPage
  4349.  
  4350. ExitHelpScreen
  4351.     MOVE.L    FileHandle,D1
  4352.     BEQ.S    ehsskip
  4353.     MOVE.L    DOSBase,A6
  4354.     JSR    LVOClose(A6)
  4355. ehsskip    BSR    Clear100Lines
  4356.     BSR.S    SwapHelpScreen
  4357. exithlp    MOVE    SaveCurrScreen,CurrScreen
  4358.      BRA    DisplayMainAll
  4359.  
  4360. SwapHelpScreen
  4361.     MOVE.L    DecompMemPtr,D0        ;get decompress address
  4362.     BEQ.S    shelps2
  4363.     MOVE.L    D0,A1            ;if true then de-allocate it
  4364.     BSR    ssets3
  4365.     BRA    FreeDecompMem
  4366. shelps2    LEA    HelpScreenData,A0
  4367.     BSR    Decompact
  4368.     BEQ    Return1
  4369.     BRA    ssets3
  4370.  
  4371. ShowHelpPage            ;showpage (*helppage)<<2
  4372.     MOVE    #2,CurrScreen
  4373.     MOVE    HelpPage,D0
  4374.     AND    #$00FF,D0
  4375.     LSL    #2,D0
  4376.     LEA    HelpTextIndex,A0
  4377.     MOVE.L    FileHandle,D1
  4378.     BEQ    Return1
  4379.     MOVE.L    (A0,D0.W),D2
  4380.  movem.l a0/d0/d2,$200.w
  4381.     ADD.L    #1024,D2
  4382.     MOVEQ    #-1,D3
  4383.     MOVE.L    DOSBase,A6
  4384.     JSR    LVOSeek(A6)
  4385.     MOVE.L    FileHandle,D1
  4386.     MOVE.L    #HelpTextData,D2
  4387.     MOVE.L    #(ScreenWidth*16)+16,D3
  4388.     JSR    LVORead(A6)
  4389.     BSR    Clear100Lines
  4390.     LEA    HelpTextData+16,A6
  4391.     MOVEQ    #120,D6
  4392.     MOVEQ    #15,D7
  4393. shploop    MOVEQ    #0,D0
  4394.     MOVE.L    A6,A1
  4395. shplop2    CMP.B    #10,(A1)+
  4396.     BEQ.S    ShowHelpLine
  4397.     TST.B    -1(A1)
  4398.     BEQ.S    ShowHelpLine
  4399.     ADDQ    #1,D0
  4400.     BRA.S    shplop2
  4401. ShowHelpLine
  4402.     MOVE.L    A6,ShowTextPtr
  4403.     MOVE.L    A1,A6
  4404.     MOVE    D6,TextOffset
  4405.     MOVE    D0,TextLength
  4406.     BEQ.S    shlskip
  4407.     JSR    ShowText
  4408. shlskip    ADD    #240,D6
  4409.     DBF    D7,shploop
  4410.     JSR    Wait_4000
  4411.     JMP    Wait_4000
  4412.  
  4413. HelpPage    dc.w    1
  4414.  
  4415. HelpUp    LEA    HelpTextData+7,A0
  4416.     BRA.S    HelpMove
  4417. HelpDown
  4418.     LEA    HelpTextData+10,A0
  4419.     BRA.S    HelpMove
  4420. HelpLeft
  4421.     LEA    HelpTextData+4,A0
  4422.     BRA.S    HelpMove
  4423. HelpRight
  4424.     LEA    HelpTextData+13,A0
  4425. HelpMove
  4426.     CLR.B    RawKeyCode
  4427.     MOVEQ    #0,D0
  4428.     JSR    HexToInteger2
  4429.     TST    D0
  4430.     BEQ    Return1
  4431.     AND    #$00FF,D0
  4432.     MOVE    D0,HelpPage
  4433.     BRA    ShowHelpPage
  4434.  
  4435. GetHelpIndex
  4436.     MOVE.L    LaHeTx,D0
  4437.     CMP.L    HelpTextIndex,D0
  4438.     BEQ    Return1
  4439.     MOVE.L    #HelpFileName,D1
  4440.     MOVE.L    #1005,D2
  4441.     MOVE.L    DOSBase,A6
  4442.     JSR    LVOOpen(A6)
  4443.     MOVE.L    D0,FileHandle
  4444.     BNE.S    gehein
  4445.     LEA    PTPath,A0
  4446.     BSR    CopyPath
  4447.     LEA    HelpFileName(PC),A0
  4448.     MOVEQ    #7,D0
  4449. hefilp2    MOVE.B    (A0)+,(A1)+
  4450.     DBF    D0,hefilp2
  4451.     MOVE.L    #FileName,D1
  4452.     MOVE.L    #1005,D2
  4453.     MOVE.L    DOSBase,A6
  4454.     JSR    LVOOpen(A6)
  4455.     MOVE.L    D0,FileHandle
  4456.     BEQ.S    HelpFileError
  4457. gehein    MOVE.L    D0,D1
  4458.     MOVE.L    #HelpTextIndex,D2
  4459.     MOVE.L    #256*4,D3
  4460.     JSR    LVORead(A6)
  4461.     MOVE.L    FileHandle,D1
  4462.     JSR    LVOClose(A6)
  4463.     MOVE.L    HelpTextIndex,LaHeTx
  4464.     RTS
  4465.  
  4466. HelpFileError
  4467.     MOVE    #2,CurrScreen
  4468.     LEA    NoHelpText(PC),A0
  4469.     MOVE    #1887,D1
  4470.     MOVEQ    #24,D0
  4471.     JMP    ShowText3
  4472.  
  4473. NoHelpText    dc.b 'Unable to open helpfile!'
  4474. HelpFileName    dc.b 'PT.help',0
  4475.  
  4476.  
  4477. ;---- Check Function Keys F6-F10 ----
  4478.  
  4479. CheckF6_F10
  4480.     CMP.B    #85,RawKeyCode
  4481.     BNE.S    CheckF7
  4482.     CLR.B    RawKeyCode
  4483.     TST    ShiftKeyStatus
  4484.     BEQ.S    cf6skip
  4485.     MOVE    ScrPattPos,F6pos
  4486. ShowPosSetText
  4487.     LEA    PosSetText,A0
  4488.     JSR    ShowStatusText
  4489.     MOVEQ    #8,D2
  4490. spsloop    JSR    Wait_4000
  4491.     DBF    D2,spsloop
  4492.     JMP    ShowAllRight
  4493.  
  4494. cf6skip    MOVE    F6pos,D0
  4495. chkalt    TST    AltKeyStatus
  4496.     BNE    PattFrom
  4497.     TST    CtrlKeyStatus
  4498.     BNE    RecordFrom
  4499.     TST    LeftAmigaStatus
  4500.     BNE    SongFrom
  4501.     TST    RunMode
  4502.     BNE    Return1
  4503.     MOVE    D0,ScrPattPos
  4504.     BRA    SetScrPatternPos
  4505.  
  4506. CheckF7    CMP.B    #86,RawKeyCode
  4507.     BNE.S    CheckF8
  4508.     CLR.B    RawKeyCode
  4509.     TST    ShiftKeyStatus
  4510.     BEQ.S    cf7skip
  4511.     MOVE    ScrPattPos,F7pos
  4512.     BRA.S    ShowPosSetText
  4513. cf7skip    MOVE    F7pos,D0
  4514.     BRA.S    chkalt
  4515.  
  4516. CheckF8    CMP.B    #87,RawKeyCode
  4517.     BNE.S    CheckF9
  4518.     CLR.B    RawKeyCode
  4519.     TST    ShiftKeyStatus
  4520.     BEQ.S    cf8skip
  4521.     MOVE    ScrPattPos,F8pos
  4522.     BRA    ShowPosSetText
  4523. cf8skip    MOVE    F8pos,D0
  4524.     BRA    chkalt
  4525.  
  4526. CheckF9    CMP.B    #88,RawKeyCode
  4527.     BNE.S    CheckF10
  4528.     CLR.B    RawKeyCode
  4529.     TST    ShiftKeyStatus
  4530.     BEQ.S    cf9skip
  4531.     MOVE    ScrPattPos,F9pos
  4532.     BRA    ShowPosSetText
  4533. cf9skip    MOVE    F9pos,D0
  4534.     BRA    chkalt
  4535.  
  4536. CheckF10
  4537.     CMP.B    #89,RawKeyCode
  4538.     BNE    Return1
  4539.     CLR.B    RawKeyCode
  4540.     TST    ShiftKeyStatus
  4541.     BEQ.S    cf10skip
  4542.     MOVE    ScrPattPos,F10pos
  4543.     BRA    ShowPosSetText
  4544. cf10skip
  4545.     MOVE    F10pos,D0
  4546.     BRA    chkalt
  4547.  
  4548. F6pos    dc.w  0
  4549. F7pos    dc.w 16
  4550. F8pos    dc.w 32
  4551. F9pos    dc.w 48
  4552. F10pos    dc.w 63
  4553.  
  4554. ;---- Check Function Keys F3-F5 ----
  4555.  
  4556. CheckF3_F5
  4557.     MOVEQ    #0,D0
  4558.     MOVE.L    D0,A0
  4559.     TST    ShiftKeyStatus
  4560.     BNE    CCP4
  4561.     TST    CtrlKeyStatus
  4562.     BNE    CCP4
  4563.     TST    AltKeyStatus
  4564.     BNE    CutCopPas
  4565.     CMP.B    #68,RawKeyCode
  4566.     BEQ.S    StepPlayForward
  4567.     CMP.B    #65,RawKeyCode
  4568.     BEQ.S    StepPlayBackward
  4569.     TST    SamScrEnable
  4570.     BEQ    Return1
  4571.     CMP.B    #82,RawKeyCode
  4572.     BEQ.S    xSamCut
  4573.     CMP.B    #83,RawKeyCode
  4574.     BEQ.S    xSamCop
  4575.     CMP.B    #84,RawKeyCode
  4576.     BEQ.S    xSamPas
  4577.     RTS
  4578.  
  4579. xSamCut    JMP    SamCut
  4580. xSamCop    JMP    SamCopy
  4581. xSamPas    JMP    SamPaste
  4582.  
  4583. StepPlayForward
  4584.     MOVE    #1,StepPlayEnable
  4585.     BSR    DoStopIt
  4586.     MOVE    ScrPattPos,D0
  4587.     BRA    pafr1
  4588.  
  4589. StepPlayBackward
  4590.     MOVE    #1,StepPlayEnable
  4591.     BSR    DoStopIt
  4592.     MOVE    ScrPattPos,D0
  4593.     SUBQ    #1,D0
  4594.     AND    #63,D0
  4595.     BRA    pafr1
  4596.  
  4597. StepPlayEnable    dc.w    0
  4598.  
  4599. CCP4    MOVEQ    #0,D0
  4600.     MOVE    PattCurPos,D0
  4601.     DIVU    #6,D0
  4602.     AND.L    #3,D0
  4603.     LSL.L    #2,D0
  4604.     MOVE.L    D0,A0
  4605. CutCopPas
  4606.     ADD.L    SongDataPtr,A0
  4607.     LEA    sd_patterndata(A0),A0
  4608.     MOVE.L    PatternNumber,D0
  4609.     LSL.L    #8,D0
  4610.     LSL.L    #2,D0
  4611.     ADD.L    D0,A0
  4612.     TST    AltKeyStatus
  4613.     BNE.S    CutCopPasPatt
  4614.     TST    CtrlKeyStatus
  4615.     BNE.S    CutCopPasCmds
  4616. CutCopPasTrack
  4617.     CMP.B    #82,RawKeyCode
  4618.     BEQ    CutTrack
  4619.     CMP.B    #83,RawKeyCode
  4620.     BEQ    CopyTrack
  4621.     CMP.B    #84,RawKeyCode
  4622.     BEQ    PasteTrack
  4623.     CMP.B    #68,RawKeyCode
  4624.     BEQ    InsNoteTrack
  4625.     CMP.B    #65,RawKeyCode
  4626.     BEQ    DelNoteTrack
  4627.     RTS
  4628.  
  4629. CutCopPasPatt
  4630.     CMP.B    #82,RawKeyCode
  4631.     BEQ.S    CutPattern
  4632.     CMP.B    #83,RawKeyCode
  4633.     BEQ.S    CopyPattern
  4634.     CMP.B    #84,RawKeyCode
  4635.     BEQ    PastePattern
  4636.     CMP.B    #68,RawKeyCode
  4637.     BEQ    InsNotePattern
  4638.     CMP.B    #65,RawKeyCode
  4639.     BEQ    DelNotePattern
  4640.     RTS
  4641.  
  4642. CutCopPasCmds
  4643.     CMP.B    #82,RawKeyCode
  4644.     BEQ    CutCmds
  4645.     CMP.B    #83,RawKeyCode
  4646.     BEQ    CopyCmds
  4647.     CMP.B    #84,RawKeyCode
  4648.     BEQ    PasteCmds
  4649.     RTS
  4650.  
  4651. CutPattern
  4652.     BSR    SaveUndo
  4653.     LEA    PatternBuffer,A1
  4654.     MOVE    #255,D0
  4655.     MOVEQ    #0,D1
  4656. cupaloop
  4657.     MOVE.L    (A0),(A1)+
  4658.     MOVE.L    D1,(A0)+
  4659.     DBF    D0,cupaloop
  4660.     CLR.B    RawKeyCode
  4661.     BRA    RedrawPattern
  4662.  
  4663. CopyPattern
  4664.     LEA    PatternBuffer,A1
  4665.     MOVE    #255,D0
  4666. copaloop
  4667.     MOVE.L    (A0)+,(A1)+
  4668.     DBF    D0,copaloop
  4669.     CLR.B    RawKeyCode
  4670.     RTS
  4671.  
  4672. PastePattern
  4673.     BSR    SaveUndo
  4674.     LEA    PatternBuffer,A1
  4675.     MOVE    #255,D0
  4676. papaloop
  4677.     MOVE.L    (A1)+,(A0)+
  4678.     DBF    D0,papaloop
  4679.     CLR.B    RawKeyCode
  4680.     BRA    RedrawPattern
  4681.  
  4682.  
  4683. CutTrack
  4684.     BSR    SaveUndo
  4685.     LEA    TrackBuffer,A1
  4686.     MOVEQ    #63,D0
  4687.     MOVEQ    #0,D1
  4688. cutrloop
  4689.     MOVE.L    (A0),(A1)+
  4690.     MOVE.L    D1,(A0)
  4691.     LEA    16(A0),A0
  4692.     DBF    D0,cutrloop
  4693.     CLR.B    RawKeyCode
  4694.     BRA    RedrawPattern
  4695.  
  4696. CopyTrack
  4697.     LEA    TrackBuffer,A1
  4698.     MOVEQ    #63,D0
  4699. cotrloop
  4700.     MOVE.L    (A0),(A1)+
  4701.     LEA    16(A0),A0
  4702.     DBF    D0,cotrloop
  4703.     CLR.B    RawKeyCode
  4704.     RTS
  4705.  
  4706. PasteTrack
  4707.     BSR    SaveUndo
  4708.     LEA    TrackBuffer,A1
  4709.     MOVEQ    #63,D0
  4710. patrloop
  4711.     MOVE.L    (A1)+,(A0)
  4712.     LEA    16(A0),A0
  4713.     DBF    D0,patrloop
  4714.     CLR.B    RawKeyCode
  4715.     BRA    RedrawPattern
  4716.  
  4717. InsNotePattern
  4718.     BSR    SaveUndo
  4719.     MOVEQ    #0,D0
  4720.     BSR    GetPositionPtr
  4721.     BSR.S    inotr
  4722.     MOVEQ    #6,D0
  4723.     BSR    GetPositionPtr
  4724.     BSR.S    inotr
  4725.     MOVEQ    #12,D0
  4726.     BSR    GetPositionPtr
  4727.     BSR.S    inotr
  4728.     MOVEQ    #18,D0
  4729.     BSR    GetPositionPtr
  4730.     BSR.S    inotr
  4731.     BRA.S    intskip
  4732. InsNoteTrack
  4733.     BSR    SaveUndo
  4734.     BSR.S    inotr
  4735. intskip    CLR.B    RawKeyCode
  4736.     ADD    D2,ScrPattPos
  4737.     AND    #$3F,ScrPattPos
  4738.     BSR    SetScrPatternPos
  4739.     BRA    RedrawPattern
  4740.  
  4741. inotr    MOVE    ScrPattPos,D1
  4742.     LSL    #4,D1
  4743.     CMP    #63*16,D1
  4744.     BEQ.S    inoskip
  4745.     MOVE    #992,D0
  4746. intloop    MOVE.L    (A0,D0.W),16(A0,D0.W)
  4747.     SUB    #16,D0
  4748.     CMP    D1,D0
  4749.     BGE.S    intloop
  4750. inoskip    MOVEQ    #1,D2
  4751.     CLR.L    (A0,D1.W)
  4752.     RTS
  4753.  
  4754. InsCmdTrack
  4755.     BSR    SaveUndo
  4756.     MOVE    PattCurPos,D0
  4757.     BSR    GetPositionPtr
  4758.     BSR.S    icmtr
  4759.     BRA.S    intskip
  4760. icmtr    MOVE    ScrPattPos,D1
  4761.     LSL    #4,D1
  4762.     CMP    #63*16,D1
  4763.     BEQ.S    icmskip
  4764.     MOVE    #992,D0
  4765. icmloop    MOVE    2(A0,D0.W),D2
  4766.     AND    #$0FFF,D2
  4767.     AND    #$F000,18(A0,D0.W)
  4768.     OR    D2,18(A0,D0.W)
  4769.     SUB    #16,D0
  4770.     CMP    D1,D0
  4771.     BGE.S    icmloop
  4772. icmskip    MOVEQ    #1,D2
  4773.     AND    #$F000,2(A0,D1.W)
  4774.     RTS
  4775.  
  4776. DelNotePattern
  4777.     BSR    SaveUndo
  4778.     MOVEQ    #0,D0
  4779.     BSR    GetPositionPtr
  4780.     BSR.S    dnt
  4781.     MOVEQ    #6,D0
  4782.     BSR    GetPositionPtr
  4783.     BSR.S    dnt
  4784.     MOVEQ    #12,D0
  4785.     BSR    GetPositionPtr
  4786.     BSR.S    dnt
  4787.     MOVEQ    #18,D0
  4788.     BSR    GetPositionPtr
  4789.     BSR.S    dnt
  4790.     BRA    intskip
  4791. DelNoteTrack
  4792.     BSR    SaveUndo
  4793.     BSR.S    dnt
  4794.     BRA    intskip
  4795.  
  4796. dnt    MOVE    ScrPattPos,D0
  4797.     BEQ    Return1
  4798.     SUBQ    #1,D0
  4799.     LSL    #4,D0
  4800. dntloop    MOVE.L    16(A0,D0.W),(A0,D0.W)
  4801.     ADD    #16,D0
  4802.     CMP    #1024,D0
  4803.     BLO.S    dntloop
  4804.     MOVE    #1008,D1
  4805.     MOVEQ    #-1,D2
  4806.     CLR.L    (A0,D1.W)
  4807.     RTS
  4808.  
  4809. DelCmdTrack
  4810.     BSR    SaveUndo
  4811.     MOVE    PattCurPos,D0
  4812.     BSR    GetPositionPtr
  4813.     BSR.S    dct
  4814.     BRA    intskip
  4815. dct    MOVE    ScrPattPos,D0
  4816.     BEQ    Return1
  4817.     SUBQ    #1,D0
  4818.     LSL    #4,D0
  4819. dctloop    MOVE    18(A0,D0.W),D2
  4820.     AND    #$0FFF,D2
  4821.     AND    #$F000,2(A0,D0.W)
  4822.     OR    D2,2(A0,D0.W)
  4823.     ADD    #16,D0
  4824.     CMP    #1024,D0
  4825.     BLO.S    dctloop
  4826.     MOVE    #1008,D1
  4827.     MOVEQ    #-1,D2
  4828.     AND    #$F000,2(A0,D1.W)
  4829.     RTS
  4830.  
  4831. CutCmds    BSR    SaveUndo
  4832.     LEA    CmdsBuffer,A1
  4833.     CLR    D0
  4834. cucmloop
  4835.     MOVE.L    0(A0,D0.W),(A1)+
  4836.     AND.L    #$FFFFF000,(A0,D0.W)
  4837.     ADD    #16,D0
  4838.     CMP    #1024,D0
  4839.     BNE.S    cucmloop
  4840.     CLR.B    RawKeyCode
  4841.     BRA    RedrawPattern
  4842.  
  4843. CopyCmds
  4844.     LEA    CmdsBuffer,A1
  4845.     CLR    D0
  4846. cocmloop
  4847.     MOVE.L    0(A0,D0.W),(A1)+
  4848.     ADD    #16,D0
  4849.     CMP    #1024,D0
  4850.     BNE.S    cocmloop
  4851.     CLR.B    RawKeyCode
  4852.     RTS
  4853.  
  4854. PasteCmds
  4855.     BSR    SaveUndo
  4856.     LEA    CmdsBuffer,A1
  4857.     CLR    D0
  4858. pacmloop
  4859.     MOVE.L    0(A0,D0.W),D1
  4860.     AND.L    #$FFFFF000,D1
  4861.     MOVE.L    (A1)+,D2
  4862.     AND.L    #$00000FFF,D2
  4863.     OR.L    D2,D1
  4864.     MOVE.L    D1,(A0,D0.W)
  4865.     ADD    #16,D0
  4866.     CMP    #1024,D0
  4867.     BNE.S    pacmloop
  4868.     CLR.B    RawKeyCode
  4869.     BRA    RedrawPattern
  4870.  
  4871. ;---- Swap Tracks ----
  4872.  
  4873. SwapTrack
  4874.     BSR    StorePtrCol
  4875.     BSR    SetWaitPtrCol
  4876.     LEA    SwapTrackText,A0
  4877.     BSR    ShowStatusText
  4878. swtloop    BSR    GetHexKey
  4879.     TST.B    D1
  4880.     BEQ.S    swtabor
  4881.     CMP.B    #4,D1
  4882.     BHI.S    swtloop
  4883.     BSR    SaveUndo
  4884.     SUBQ.L    #1,D1
  4885.     LSL.L    #2,D1
  4886.     MOVE.L    D1,D0
  4887.     MOVE.L    SongDataPtr,A0
  4888.     LEA    sd_patterndata(A0),A0
  4889.     MOVE.L    PatternNumber,D1
  4890.     LSL.L    #8,D1
  4891.     LSL.L    #2,D1
  4892.     ADD.L    D1,A0
  4893.     MOVE.L    A0,A1
  4894.     ADD.L    D0,A0
  4895.     MOVE    PattCurPos,D0
  4896.     DIVU    #6,D0
  4897.     AND.L    #$F,D0
  4898.     LSL.L    #2,D0
  4899.     ADD.L    D0,A1
  4900.     MOVEQ    #63,D1
  4901. swtloop2
  4902.     MOVE.L    (A0),D0
  4903.     MOVE.L    (A1),(A0)
  4904.     MOVE.L    D0,(A1)
  4905.     LEA    16(A0),A0
  4906.     LEA    16(A1),A1
  4907.     DBF    D1,swtloop2
  4908.     BSR    RedrawPattern
  4909. swtabor    BSR    ShowAllRight
  4910.     BRA    RestorePtrCol
  4911.  
  4912. SwapTrackText    dc.b 'Swap (1/2/3/4) ?',0,0
  4913.  
  4914. ;---- Block Commands ----
  4915.  
  4916. BlockMarkText    dc.b 'mark block 00-00',0,0
  4917. BlockErrorText    dc.b 'no block marked !',0
  4918. BufEmptyText    dc.b 'buffer is empty !',0
  4919. BlockFromPos    dc.w 0
  4920. BlockToPos    dc.w 0
  4921. BlockMarkFlag    dc.w 0
  4922. BlockBufferFlag    dc.w 0
  4923. JoinPasteFlag    dc.w 0
  4924. PolyPasteFlag    dc.w 0
  4925. BuffFromPos    dc.w 0
  4926. BuffToPos    dc.w 0
  4927.  
  4928. BeginBlock
  4929.     CLR.B    RawKeyCode
  4930.     TST    BlockMarkFlag
  4931.     BEQ.S    beblskp
  4932. blkunma    CLR    BlockMarkFlag
  4933.     BRA    ShowAllRight
  4934. beblskp    MOVE    #1,BlockMarkFlag
  4935.     MOVE    ScrPattPos,BlockFromPos
  4936.     MOVE    ScrPattPos,BlockToPos
  4937. ShowBlockPos
  4938.     MOVE    BlockFromPos,D0
  4939.     MOVE    BlockToPos,D1
  4940.     CMP    D0,D1
  4941.     BHS.S    sbpskip
  4942.     EXG    D0,D1
  4943. sbpskip    LEA    BlockMarkText+12(PC),A0
  4944.     BSR    IntTo2DecAscii
  4945.     LEA    BlockMarkText+15(PC),A0
  4946.     MOVE    D1,D0
  4947.     BSR    IntTo2DecAscii
  4948.     LEA    BlockMarkText(PC),A0
  4949.     BRA    ShowStatusText
  4950.  
  4951. Re_MarkBlock
  4952.     CLR.B    RawKeyCode
  4953.     MOVE    #1,BlockMarkFlag
  4954.     MOVE    BlockToPos,ScrPattPos
  4955.     BSR    SetScrPatternPos
  4956.     BRA.S    ShowBlockPos
  4957.  
  4958. CheckBlockPos
  4959.     TST    BlockMarkFlag
  4960.     BEQ    Return1
  4961.     MOVE    ScrPattPos,D0
  4962.     CMP    BlockToPos,D0
  4963.     BEQ    Return1
  4964.     MOVE    D0,BlockToPos
  4965.     BRA.S    ShowBlockPos
  4966.  
  4967. IntTo2DecAscii
  4968.     AND.L    #$FF,D0
  4969.     DIVU    #10,D0
  4970.     ADD.B    #'0',D0
  4971.     MOVE.B    D0,-1(A0)
  4972.     SWAP    D0
  4973.     ADD.B    #'0',D0
  4974.     MOVE.B    D0,(A0)
  4975.     RTS
  4976.  
  4977. CutBlock
  4978.     CLR.B    RawKeyCode
  4979.     TST    BlockMarkFlag
  4980.     BEQ    BlockError
  4981.     BSR.S    cobldo
  4982.     MOVE    #1,BlockMarkFlag
  4983.     BRA    ClearBlock
  4984.  
  4985. CopyBlock
  4986.     CLR.B    RawKeyCode
  4987.     TST    BlockMarkFlag
  4988.     BEQ    BlockError
  4989. cobldo    CLR    BlockMarkFlag
  4990.     MOVE    #1,BlockBufferFlag
  4991.     MOVE    PattCurPos,D0
  4992.     BSR    GetPositionPtr
  4993.     LEA    BlockBuffer,A1
  4994.     MOVEQ    #63,D0
  4995. cobllop    MOVE.L    (A0),(A1)
  4996.     LEA    16(A0),A0
  4997.     LEA    16(A1),A1
  4998.     DBF    D0,cobllop
  4999.     MOVE    BlockFromPos,D0
  5000.     MOVE    BlockToPos,D1
  5001.     CMP    D0,D1
  5002.     BHS.S    coblskp
  5003.     EXG    D0,D1
  5004. coblskp    MOVE    D0,BuffFromPos
  5005.     MOVE    D1,BuffToPos
  5006.     BRA    ShowAllRight
  5007.  
  5008.  
  5009. PasteBlock
  5010.     CLR.B    RawKeyCode
  5011.     TST    BlockBufferFlag
  5012.     BEQ    BufferError
  5013.     BSR    SaveUndo
  5014.     MOVE    PattCurPos,D0
  5015.     BSR    GetPositionPtr
  5016.     LEA    BlockBuffer,A1
  5017.     MOVE    BuffFromPos,D0
  5018.     MOVE    BuffToPos,D1
  5019.     MOVE    ScrPattPos,D2
  5020.     LSL    #4,D0
  5021.     LSL    #4,D1
  5022.     LSL    #4,D2
  5023. pabllop    MOVE.L    (A1,D0.W),D3
  5024.     TST    JoinPasteFlag
  5025.     BEQ.S    pablskp
  5026.     MOVE.L    D3,D4
  5027.     AND.L    #$FFFFF000,D4
  5028.     BNE.S    pablskp
  5029.     MOVE.L    (A0,D2.W),D4
  5030.     AND.L    #$FFFFF000,D4
  5031.     AND.L    #$00000FFF,D3
  5032.     OR.L    D4,D3
  5033. pablskp    MOVE.L    D3,(A0,D2.W)
  5034.     CMP    D0,D1
  5035.     BEQ.S    pablend
  5036.     CMP    #63*16,D0
  5037.     BEQ.S    pablend
  5038.     CMP    #63*16,D2
  5039.     BEQ.S    pablend
  5040.     ADD    #16,D0
  5041.     ADD    #16,D2
  5042.     TST    PolyPasteFlag
  5043.     BEQ.S    pabllop
  5044.     MOVEM.L    A1/D0-D2,-(SP)
  5045.     BSR    GotoNextMulti
  5046.     MOVE    PattCurPos,D0
  5047.     BSR    GetPositionPtr
  5048.     MOVEM.L    (SP)+,A1/D0-D2
  5049.     BRA.S    pabllop
  5050. pablend    CLR    JoinPasteFlag
  5051.     CLR    PolyPasteFlag
  5052.     BSR    ShowAllRight
  5053.     BSR    RedrawPattern
  5054.     TST    ShiftKeyStatus
  5055.     BNE    Return1
  5056.     MOVE    BuffToPos,D0
  5057.     SUB    BuffFromPos,D0
  5058.     ADDQ    #1,D0
  5059.     ADD    ScrPattPos,D0
  5060.     CMP    #63,D0
  5061.     BLS.S    pablset
  5062.     MOVEQ    #0,D0
  5063. pablset    MOVE    D0,ScrPattPos
  5064.     BRA    SetScrPatternPos
  5065.  
  5066. PolyphonizeBlock
  5067.     MOVE    #1,PolyPasteFlag
  5068. JoinPasteBlock
  5069.     MOVE    #1,JoinPasteFlag
  5070.     BRA    PasteBlock
  5071.  
  5072. InsertBlock
  5073.     CLR.B    RawKeyCode
  5074.     TST    BlockBufferFlag
  5075.     BEQ    BufferError
  5076.     CMP    #63,ScrPattPos
  5077.     BEQ    PasteBlock
  5078.     MOVE    BuffToPos,D0
  5079.     SUB    BuffFromPos,D0
  5080. inbllop    MOVE.L    D0,-(SP)
  5081.     MOVE    PattCurPos,D0
  5082.     BSR    GetPositionPtr
  5083.     BSR    inotr
  5084.     MOVE.L    (SP)+,D0
  5085.     DBF    D0,inbllop
  5086.     BRA    PasteBlock
  5087.  
  5088. DeleteBlock
  5089.     CLR.B    RawKeyCode
  5090.     TST    BlockMarkFlag
  5091.     BEQ    BlockError
  5092.     BSR    SaveUndo
  5093.     MOVE    BlockFromPos,D0
  5094.     MOVE    BlockToPos,D1
  5095.     CMP    D0,D1
  5096.     BHS.S    deblskp
  5097.     EXG    D0,D1
  5098. deblskp    CMP    #63,D1
  5099.     BEQ.S    ClearBlock
  5100.     CLR    BlockMarkFlag
  5101.     MOVE    D0,ScrPattPos
  5102.     ADDQ    #1,ScrPattPos
  5103.     SUB    D0,D1
  5104.     MOVE    D1,D0
  5105. debllop    MOVE.L    D0,-(SP)
  5106.     MOVE    PattCurPos,D0
  5107.     BSR    GetPositionPtr
  5108.     BSR    dnt
  5109.     MOVE.L    (SP)+,D0
  5110.     DBF    D0,debllop
  5111.     SUBQ    #1,ScrPattPos
  5112.     BSR    ShowAllRight
  5113.     BRA    RedrawPattern
  5114.  
  5115. ClearBlock
  5116.     TST    BlockMarkFlag
  5117.     BEQ    BlockError
  5118.     BSR    SaveUndo
  5119.     CLR    BlockMarkFlag
  5120.     MOVE    PattCurPos,D0
  5121.     BSR    GetPositionPtr
  5122.     MOVE    BlockFromPos,D0
  5123.     MOVE    BlockToPos,D1
  5124.     CMP    D0,D1
  5125.     BHS.S    clblskp
  5126.     EXG    D0,D1
  5127. clblskp    LSL    #4,D0
  5128.     LSL    #4,D1
  5129.     MOVEQ    #0,D2
  5130. clbllop    MOVE.L    D2,(A0,D0.W)
  5131.     CMP    D0,D1
  5132.     BEQ.S    clblend
  5133.     ADD    #16,D0
  5134.     BRA.S    clbllop
  5135. clblend    BSR    ShowAllRight
  5136.     BRA    RedrawPattern
  5137.  
  5138. BackwardsBlock
  5139.     CLR.B    RawKeyCode
  5140.     TST    BlockMarkFlag
  5141.     BEQ    BlockError
  5142.     BSR    SaveUndo
  5143.     CLR    BlockMarkFlag
  5144.     MOVE    PattCurPos,D0
  5145.     BSR    GetPositionPtr
  5146.     MOVE    BlockFromPos,D0
  5147.     MOVE    BlockToPos,D1
  5148.     CMP    D0,D1
  5149.     BHS.S    bablskp
  5150.     EXG    D0,D1
  5151. bablskp    LSL    #4,D0
  5152.     LSL    #4,D1
  5153. babllop    MOVE.L    (A0,D0.W),D2
  5154.     MOVE.L    (A0,D1.W),(A0,D0.W)
  5155.     MOVE.L    D2,(A0,D1.W)
  5156.     CMP    D1,D0
  5157.     BHS.S    bablend
  5158.     ADD    #16,D0
  5159.     SUB    #16,D1
  5160.     CMP    D1,D0
  5161.     BHS.S    bablend
  5162.     BRA.S    babllop
  5163. bablend    BSR    ShowAllRight
  5164.     BRA    RedrawPattern
  5165.  
  5166. TransBlockUp
  5167.     SF    trblflag
  5168.     BRA.S    trbldo
  5169. TransBlockDown
  5170.     ST    trblflag
  5171. trbldo    CLR.B    RawKeyCode
  5172.     TST    BlockMarkFlag
  5173.     BEQ.S    BlockError
  5174.     BSR    SaveUndo
  5175.     MOVE    #2,NoteShift
  5176.     MOVE    BlockFromPos,D0
  5177.     MOVE    BlockToPos,D1
  5178.     CMP    D0,D1
  5179.     BHS.S    trblskp
  5180.     EXG    D0,D1
  5181. trblskp    MOVE    D0,D5
  5182.     LSL    #4,D5
  5183.     SUB    D0,D1
  5184.     MOVE    D1,D6
  5185.     MOVE    PattCurPos,D0
  5186.     BSR    GetPositionPtr
  5187.     LEA    (A0,D5.W),A3
  5188.     MOVEQ    #0,D3
  5189.     MOVE.B    SampleAllFlag,sampallsave
  5190.     ST    SampleAllFlag
  5191.     TST.B    trblflag
  5192.     BEQ.S    trblup
  5193.     BSR    sandlo2
  5194.     MOVE.B    sampallsave,SampleAllFlag
  5195.     BRA    RedrawPattern
  5196. trblup    BSR    sanulo2
  5197.     MOVE.B    sampallsave,SampleAllFlag
  5198.     BRA    RedrawPattern
  5199.  
  5200. trblflag    dc.b 0
  5201. sampallsave    dc.b 0
  5202.  
  5203. BlockError
  5204.     LEA    BlockErrorText,A0
  5205.     BSR    ShowStatusText
  5206.     BRA    SetErrorPtrCol
  5207.  
  5208. BufferError
  5209.     LEA    BufEmptyText,A0
  5210.     BSR    ShowStatusText
  5211.     BRA    SetErrorPtrCol
  5212.  
  5213. ExpandTrack
  5214.     CLR.B    RawKeyCode
  5215.     BSR    SaveUndo
  5216.     MOVE    ScrPattPos,PosSave
  5217.     ADDQ    #1,ScrPattPos
  5218.     CMP    #64,ScrPattPos
  5219.     BHS.S    extrend
  5220. extrlop    MOVE    PattCurPos,D0
  5221.     BSR    GetPositionPtr
  5222.     BSR    inotr
  5223.     ADDQ    #2,ScrPattPos
  5224.     CMP    #64,ScrPattPos
  5225.     BLO.S    extrlop
  5226. extrend    MOVE    PosSave,ScrPattPos
  5227.     BRA    RedrawPattern
  5228.  
  5229. ContractTrack
  5230.     CLR.B    RawKeyCode
  5231.     BSR    SaveUndo
  5232.     MOVE    ScrPattPos,PosSave
  5233.     ADDQ    #1,ScrPattPos
  5234.     CMP    #64,ScrPattPos
  5235.     BHS.S    cotrend
  5236. cotrlop    MOVE    PattCurPos,D0
  5237.     BSR    GetPositionPtr
  5238.     BSR    dnt
  5239.     ADDQ    #1,ScrPattPos
  5240.     CMP    #64,ScrPattPos
  5241.     BLO.S    cotrlop
  5242. cotrend    MOVE    PosSave,ScrPattPos
  5243.     BRA    RedrawPattern
  5244.  
  5245. PosSave    dc.w 0
  5246.  
  5247.  
  5248. KillToEndOfTrack
  5249.     CLR.B    RawKeyCode
  5250.     BSR    SaveUndo
  5251.     MOVE    PattCurPos,D0
  5252.     BSR    GetPositionPtr
  5253.     MOVE    ScrPattPos,D0
  5254.     MOVE    D0,D1
  5255.     MULU    #16,D1
  5256.     LEA    (A0,D1.W),A0
  5257.     TST    ShiftKeyStatus
  5258.     BNE.S    KillToStart
  5259. kteot    CLR.L    (A0)
  5260.     LEA    16(A0),A0
  5261.     ADDQ    #1,D0
  5262.     CMP    #64,D0
  5263.     BLO.S    kteot
  5264.     BRA    RedrawPattern
  5265.  
  5266. KillToStart
  5267.     CLR.L    (A0)
  5268.     LEA    -16(A0),A0
  5269.     TST    D0
  5270.     BEQ    RedrawPattern
  5271.     SUBQ    #1,D0
  5272.     BRA.S    KillToStart
  5273.  
  5274. UndoLastChange
  5275.     CLR.B    RawKeyCode
  5276.     MOVEQ    #0,D0
  5277.     BSR    GetPositionPtr
  5278.     LEA    UndoBuffer,A1
  5279.     MOVE    #255,D0
  5280. unlalop    MOVE.L    (A1),D1
  5281.     MOVE.L    (A0),(A1)+
  5282.     MOVE.L    D1,(A0)+
  5283.     DBF    D0,unlalop
  5284.     BRA    RedrawPattern
  5285.  
  5286. SaveUndo
  5287.     MOVEM.L    D0/A0-A1,-(SP)
  5288.     MOVEQ    #0,D0
  5289.     BSR    GetPositionPtr
  5290.     LEA    UndoBuffer,A1
  5291.     MOVE    #255,D0
  5292. saunlop    MOVE.L    (A0)+,(A1)+
  5293.     DBF    D0,saunlop
  5294.     MOVEM.L    (SP)+,D0/A0-A1
  5295.     RTS
  5296.  
  5297. BoostAll
  5298.     LEA    BoostAllText,A0
  5299.     BSR    AreYouSure
  5300.     BNE    SetErrorPtrCol
  5301.     MOVE    InsNum,SaveInstr
  5302.     MOVE    #1,InsNum
  5303. boallop    BSR    ShowSampleInfo
  5304.     BSR    Boost2
  5305.     ADDQ    #1,InsNum
  5306.     CMP    #32,InsNum
  5307.     BLO.S    boallop
  5308.     MOVE    SaveInstr,InsNum
  5309.     BRA    ShowSampleInfo
  5310.  
  5311. FilterAll
  5312.     LEA    FilterAllText,A0
  5313.     BSR    AreYouSure
  5314.     BNE    SetErrorPtrCol
  5315.     MOVE    InsNum,SaveInstr
  5316.     MOVE    #1,InsNum
  5317. fiallop    BSR    ShowSampleInfo
  5318.     BSR    Filter2
  5319.     ADDQ    #1,InsNum
  5320.     CMP    #32,InsNum
  5321.     BLO.S    fiallop
  5322.     MOVE    SaveInstr,InsNum
  5323.     BRA    ShowSampleInfo
  5324.  
  5325. BoostAllText    dc.b 'boost all samples',0
  5326. FilterAllText    dc.b 'filter all sampls',0
  5327. SaveInstr    dc.w 0
  5328.  
  5329. ;---- Check Function Keys F1-F2 ----
  5330.  
  5331. CheckF1_F2
  5332.     CMP.B    #80,RawKeyCode
  5333.     BEQ.S    SetOctaveLow
  5334.     CMP.B    #81,RawKeyCode
  5335.     BEQ.S    SetOctaveHigh
  5336.     RTS
  5337.  
  5338. SetOctaveLow
  5339.     MOVE.L    #KbdTransTable1,KeyTransTabPtr
  5340.     CLR.B    RawKeyCode
  5341.     RTS
  5342.  
  5343. SetOctaveHigh
  5344.     MOVE.L    #KbdTransTable2,KeyTransTabPtr
  5345.     CLR.B    RawKeyCode
  5346.     RTS
  5347.  
  5348.  
  5349. ;---- Get Hex Key ----
  5350.  
  5351. GetHexByte
  5352.     BSR    StorePtrCol
  5353.     BSR    SetWaitPtrCol
  5354.     CLR.B    RawKeyCode
  5355.     MOVEQ    #0,D0
  5356.     MOVE    TextOffset,D0
  5357.     DIVU    #40,D0
  5358.     ADDQ    #6,D0
  5359.     MOVE    D0,LineCurY
  5360.     SWAP    D0
  5361.     LSL    #3,D0
  5362.     ADDQ    #4,D0
  5363.     MOVE    D0,LineCurX
  5364.     BSR    UpdateLineCurPos
  5365.     BSR.S    GetHexKey
  5366.     MOVE.L    D1,D0
  5367.     MOVE.B    D1,D6
  5368.     LSL.B    #4,D6
  5369.     BSR    PrintHexDigit
  5370.     ADD    #8,LineCurX
  5371.     BSR    UpdateLineCurPos
  5372.     BSR.S    GetHexKey
  5373.     MOVE.L    D1,D0
  5374.     OR.B    D1,D6
  5375.     BSR    PrintHexDigit
  5376.     CLR    LineCurX
  5377.     MOVE    #270,LineCurY
  5378.     BSR    UpdateLineCurPos
  5379.     BSR    RestorePtrCol
  5380.     MOVEQ    #0,D0
  5381.     MOVE.B    D6,D0
  5382.     RTS
  5383.  
  5384. GetHexKey
  5385.     CLR.B    MixChar
  5386.     MOVEQ    #0,D0
  5387.     MOVEQ    #0,D1
  5388.     BTST    #2,$DFF016
  5389.     BEQ.S    ghkreturn
  5390.     BSR    DoKeyBuffer
  5391.     MOVE.B    RawKeyCode,D0
  5392.     MOVE.B    D0,MixChar
  5393.     BEQ.S    GetHexKey
  5394.     CMP.B    #68,D0 ; CR
  5395.     BEQ.S    ghkreturn
  5396.     CMP.B    #69,D0 ; Esc
  5397.     BEQ.S    ghkreturn
  5398.     CMP.B    #79,D0 ; <--
  5399.     BEQ.S    ghkleft
  5400.     CMP.B    #78,D0 ; -->
  5401.     BEQ.S    ghkright
  5402.     BSR.S    CheckHexKey
  5403.     CMP.B    #16,D1
  5404.     BEQ.S    GetHexKey
  5405.     CLR.B    RawKeyCode
  5406. ghkreturn
  5407.     MOVEQ    #0,D0
  5408.     RTS
  5409.  
  5410. ghkleft    MOVEQ    #-1,D0
  5411.     RTS
  5412.  
  5413. ghkright
  5414.     MOVEQ    #1,D0
  5415.     RTS
  5416.  
  5417. CheckHexKey
  5418.     LEA    RawKeyHexTable,A0
  5419.     MOVEQ    #0,D1
  5420. chxloop    CMP.B    (A0)+,D0
  5421.     BEQ    Return1
  5422.     ADDQ.B    #1,D1
  5423.     CMP.B    #16,D1
  5424.     BNE.S    chxloop
  5425.     RTS
  5426.  
  5427. ;---- Enter Edit Commands (effects) ----
  5428.  
  5429. EditCommand
  5430.     TST.L    EditMode
  5431.     BEQ    Return1
  5432.     MOVEQ    #0,D0
  5433.     MOVE.B    RawKeyCode,D0
  5434.     BSR.S    CheckHexKey
  5435.     CMP.B    #16,D1
  5436.     BNE.S    DoEditCommand
  5437.     RTS
  5438.  
  5439. DoEditCommand
  5440.     CMP    #1,PattCurPos
  5441.     BNE.S    ChkPos2
  5442.     CMP    #1,D1
  5443.     BHI    Return1
  5444.     MOVE.L    #$FFF,D2
  5445.     CLR    CmdOffset
  5446.     LSL    #4,D1
  5447.     LSL    #8,D1
  5448.     BRA    UpdateCommand
  5449.  
  5450. ChkPos2    CMP    #2,PattCurPos
  5451.     BNE.S    ChkPos3
  5452.     MOVE.L    #$FFF,D2
  5453.     MOVE    #2,CmdOffset
  5454.     LSL    #4,D1
  5455.     LSL    #8,D1
  5456.     BRA    UpdateCommand
  5457.  
  5458. ChkPos3    CMP    #3,PattCurPos
  5459.     BNE.S    ChkPos4
  5460.     MOVE.L    #$F0FF,D2
  5461.     MOVE    #2,CmdOffset
  5462.     LSL    #8,D1
  5463.     BRA    UpdateCommand
  5464.  
  5465. ChkPos4    CMP    #4,PattCurPos
  5466.     BNE.S    ChkPos5
  5467.     MOVE.L    #$FF0F,D2
  5468.     MOVE    #2,CmdOffset
  5469.     LSL    #4,D1
  5470.     BRA    UpdateCommand
  5471.  
  5472. ChkPos5    CMP    #5,PattCurPos
  5473.     BNE.S    ChkPos7
  5474.     MOVE.L    #$FFF0,D2
  5475.     MOVE    #2,CmdOffset
  5476.     BRA    UpdateCommand
  5477.  
  5478. ChkPos7    CMP    #7,PattCurPos
  5479.     BNE.S    ChkPos8
  5480.     CMP    #1,D1
  5481.     BHI    Return1
  5482.     MOVE.L    #$FFF,D2
  5483.     MOVE    #4,CmdOffset
  5484.     LSL    #4,D1
  5485.     LSL    #8,D1
  5486.     BRA    UpdateCommand
  5487.  
  5488. ChkPos8    CMP    #8,PattCurPos
  5489.     BNE.S    ChkPos9
  5490.     MOVE.L    #$FFF,D2
  5491.     MOVE    #6,CmdOffset
  5492.     LSL    #4,D1
  5493.     LSL    #8,D1
  5494.     BRA    UpdateCommand
  5495.  
  5496. ChkPos9    CMP    #9,PattCurPos
  5497.     BNE.S    ChkPos10
  5498.     MOVE.L    #$F0FF,D2
  5499.     MOVE    #6,CmdOffset
  5500.     LSL    #8,D1
  5501.     BRA    UpdateCommand
  5502.  
  5503. ChkPos10
  5504.     CMP    #10,PattCurPos
  5505.     BNE.S    ChkPos11
  5506.     MOVE.L    #$FF0F,D2
  5507.     MOVE    #6,CmdOffset
  5508.     LSL    #4,D1
  5509.     BRA    UpdateCommand
  5510.  
  5511. ChkPos11
  5512.     CMP    #11,PattCurPos
  5513.     BNE.S    ChkPos13
  5514.     MOVE.L    #$FFF0,D2
  5515.     MOVE    #6,CmdOffset
  5516.     BRA    UpdateCommand
  5517.  
  5518. ChkPos13
  5519.     CMP    #13,PattCurPos
  5520.     BNE.S    ChkPos14
  5521.     CMP    #1,D1
  5522.     BHI    Return1
  5523.     MOVE.L    #$FFF,D2
  5524.     MOVE    #8,CmdOffset
  5525.     LSL    #4,D1
  5526.     LSL    #8,D1
  5527.     BRA    UpdateCommand
  5528.  
  5529. ChkPos14
  5530.     CMP    #14,PattCurPos
  5531.     BNE.S    ChkPos15
  5532.     MOVE.L    #$FFF,D2
  5533.     MOVE    #10,CmdOffset
  5534.     LSL    #4,D1
  5535.     LSL    #8,D1
  5536.     BRA    UpdateCommand
  5537.  
  5538. ChkPos15
  5539.     CMP    #15,PattCurPos
  5540.     BNE.S    ChkPos16
  5541.     MOVE.L    #$F0FF,D2
  5542.     MOVE    #10,CmdOffset
  5543.     LSL    #8,D1
  5544.     BRA    UpdateCommand
  5545.  
  5546. ChkPos16
  5547.     CMP    #16,PattCurPos
  5548.     BNE.S    ChkPos17
  5549.     MOVE.L    #$FF0F,D2
  5550.     MOVE    #10,CmdOffset
  5551.     LSL    #4,D1
  5552.     BRA    UpdateCommand
  5553.  
  5554. ChkPos17
  5555.     CMP    #17,PattCurPos
  5556.     BNE.S    ChkPos19
  5557.     MOVE.L    #$FFF0,D2
  5558.     MOVE    #10,CmdOffset
  5559.     BRA    UpdateCommand
  5560.  
  5561. ChkPos19
  5562.     CMP    #19,PattCurPos
  5563.     BNE.S    ChkPos20
  5564.     CMP    #1,D1
  5565.     BHI    Return1
  5566.     MOVE.L    #$FFF,D2
  5567.     MOVE    #12,CmdOffset
  5568.     LSL    #4,D1
  5569.     LSL    #8,D1
  5570.     BRA.S    UpdateCommand
  5571.  
  5572. ChkPos20
  5573.     CMP    #20,PattCurPos
  5574.     BNE.S    ChkPos21
  5575.     MOVE.L    #$FFF,D2
  5576.     MOVE    #14,CmdOffset
  5577.     LSL    #4,D1
  5578.     LSL    #8,D1
  5579.     BRA.S    UpdateCommand
  5580.  
  5581. ChkPos21
  5582.     CMP    #21,PattCurPos
  5583.     BNE.S    ChkPos22
  5584.     MOVE.L    #$F0FF,D2
  5585.     MOVE    #14,CmdOffset
  5586.     LSL    #8,D1
  5587.     BRA.S    UpdateCommand
  5588.  
  5589. ChkPos22
  5590.     CMP    #22,PattCurPos
  5591.     BNE.S    MustBePos23
  5592.     MOVE.L    #$FF0F,D2
  5593.     MOVE    #14,CmdOffset
  5594.     LSL    #4,D1
  5595.     BRA.S    UpdateCommand
  5596.  
  5597. MustBePos23
  5598.     MOVE.L    #$FFF0,D2
  5599.     MOVE    #14,CmdOffset
  5600. UpdateCommand
  5601.     MOVE.L    SongDataPtr,A0
  5602.     LEA    sd_patterndata(A0),A0
  5603.     MOVE.L    PatternNumber,D0
  5604.     LSL.L    #8,D0
  5605.     LSL.L    #2,D0
  5606.     ADD.L    D0,A0
  5607.     MOVEQ    #0,D0
  5608.     MOVE    ScrPattPos,D0
  5609.     LSL    #4,D0
  5610.     EXT.L    D0
  5611.     ADD.L    D0,A0
  5612.     ADD    CmdOffset,A0
  5613.     AND    D2,(A0)
  5614.     ADD    D1,(A0)
  5615.     MOVE    (A0),WordNumber
  5616.     MOVEQ    #0,D0
  5617.     MOVE    ScrPattPos,D0
  5618.     MULU    #7*40,D0
  5619.     MOVE    PattCurPos,D1
  5620.     DIVU    #6,D1
  5621.     MULU    #9,D1
  5622.     ADD.L    D1,D0
  5623.     ADD    #7528,D0
  5624.     MOVE    D0,TextOffset
  5625.     CMP    #0,CmdOffset
  5626.     BEQ.S    ShowInstrNibble
  5627.     CMP    #4,CmdOffset
  5628.     BEQ.S    ShowInstrNibble
  5629.     CMP    #8,CmdOffset
  5630.     BEQ.S    ShowInstrNibble
  5631.     CMP    #12,CmdOffset
  5632.     BEQ.S    ShowInstrNibble
  5633.     BSR    PrintHexWord
  5634. dscend    BSR    EditMoveDown
  5635.     CLR.B    RawKeyCode
  5636.     RTS
  5637.  
  5638. ShowInstrNibble
  5639.     SUBQ    #1,TextOffset
  5640.     MOVE    #1,TextLength
  5641.     MOVEQ    #0,D0
  5642.     MOVE    (A0),D0
  5643.     AND    #$F000,D0
  5644.     BNE.S    sinokok
  5645.     TST.B    BlankZeroFlag
  5646.     BEQ.S    sinokok
  5647.     MOVE.L    #BlankInsText,D0
  5648.     BRA.S    sinprt
  5649. sinokok    LSR    #4,D0
  5650.     LSR    #7,D0
  5651.     ADD.L    #FastHexTable+1,D0
  5652. sinprt    MOVE.L    D0,ShowTextPtr
  5653.     BSR    ShowText
  5654.     BRA.S    dscend
  5655.  
  5656. ;---- Store/Insert Effect Commands ----
  5657.  
  5658. CheckStoreEffect
  5659.     MOVEQ    #0,D0
  5660.     MOVE.B    RawKeyCode,D0
  5661.     BEQ    Return1
  5662.     CMP.B    #70,D0 ; Del
  5663.     BEQ    CheckKeyboard2
  5664.     CMP.B    #10,D0
  5665.     BHI    Return1
  5666.     SUBQ.B    #1,D0
  5667.     ADD.B    D0,D0
  5668.     MOVE.L    D0,D7
  5669.     MOVE    PattCurPos,D0
  5670.     BSR    GetPositionPtr
  5671.     MOVE    ScrPattPos,D0
  5672.     LSL    #4,D0
  5673.     LEA    (A0,D0.W),A0
  5674.     MOVE    2(A0),D0
  5675.     AND    #$0FFF,D0
  5676.     LEA    EffectMacros,A0
  5677.     MOVE    D0,(A0,D7.W)
  5678.     LEA    CommandStoredText,A0
  5679.     BSR    ShowStatusText
  5680.     BSR    WaitALittle
  5681.     BRA    ShowAllRight
  5682.  
  5683. CommandStoredText dc.b 'command stored!',0
  5684.  
  5685. CheckInsertEffect
  5686.     CLR    InsEfx
  5687.     MOVEQ    #0,D0
  5688.     MOVE.B    RawKeyCode,D0
  5689.     BEQ    Return1
  5690.     CMP.B    #70,D0 ; Del
  5691.     BEQ    CheckKeyboard2
  5692.     CMP.B    #11,D0 ; -
  5693.     BEQ    DecreaseEffect
  5694.     CMP.B    #12,D0 ; = (+)
  5695.     BEQ.S    IncreaseEffect
  5696.     CMP.B    #13,D0 ; \
  5697.     BEQ.S    CopyEffect
  5698.     CMP.B    #10,D0
  5699.     BHI    Return1
  5700.     SUBQ.B    #1,D0
  5701.     ADD.B    D0,D0
  5702.     LEA    EffectMacros,A0
  5703.     MOVE    (A0,D0.W),InsEfx
  5704. DoInsEffect
  5705.     MOVE.B    #70,RawKeyCode
  5706.     BRA    CheckNoteKeys
  5707.  
  5708. GetLastEffect
  5709.     MOVE    PattCurPos,D0
  5710.     BSR    GetPositionPtr
  5711.     MOVE    ScrPattPos,D0
  5712.     SUBQ    #1,D0
  5713.     AND    #$3F,D0
  5714.     LSL    #4,D0
  5715.     LEA    (A0,D0.W),A0
  5716.     MOVE    2(A0),D0
  5717.     AND    #$0FFF,D0
  5718.     RTS
  5719.  
  5720. CopyEffect
  5721.     BSR.S    GetLastEffect
  5722.     MOVE    D0,InsEfx
  5723.     BRA.S    DoInsEffect
  5724.  
  5725. IncreaseEffect
  5726.     BSR.S    GetLastEffect
  5727.     MOVE    D0,D1
  5728.     AND    #$0F00,D1
  5729.     CMP    #$0E00,D1
  5730.     BEQ.S    IncECom
  5731.     ADDQ.B    #1,D0
  5732.     MOVE    D0,InsEfx
  5733.     BRA.S    DoInsEffect
  5734.  
  5735. IncECom    MOVE    D0,D1
  5736.     ADDQ.B    #1,D1
  5737.     AND.B    #$0F,D1
  5738.     AND    #$0FF0,D0
  5739.     OR.B    D1,D0
  5740.     MOVE    D0,InsEfx
  5741.     BRA.S    DoInsEffect
  5742.  
  5743. DecreaseEffect
  5744.     BSR.S    GetLastEffect
  5745.     MOVE    D0,D1
  5746.     AND    #$0F00,D1
  5747.     CMP    #$0E00,D1
  5748.     BEQ.S    DecECom
  5749.     SUBQ.B    #1,D0
  5750.     MOVE    D0,InsEfx
  5751.     BRA    DoInsEffect
  5752.  
  5753. DecECom    MOVE    D0,D1
  5754.     SUBQ.B    #1,D1
  5755.     AND.B    #$0F,D1
  5756.     AND    #$0FF0,D0
  5757.     OR.B    D1,D0
  5758.     MOVE    D0,InsEfx
  5759.     BRA    DoInsEffect
  5760.  
  5761. InsEfx    dc.w 0
  5762.  
  5763. ;---- Check Keyboard for notekeys ----
  5764.  
  5765. CheckKeyboard
  5766.     TST.B    RawKeyCode
  5767.     BEQ    Return1
  5768.     TST    LeftAmigaStatus
  5769.     BNE    Return1
  5770.     TST    CtrlKeyStatus
  5771.     BNE    Return1
  5772.     TST    ShiftKeyStatus
  5773.     BNE    CheckStoreEffect
  5774.     TST    AltKeyStatus
  5775.     BNE    CheckInsertEffect
  5776. CheckKeyboard2
  5777.     MOVE    PattCurPos,D0
  5778.     BEQ.S    CheckNoteKeys
  5779.     CMP    #6,D0
  5780.     BEQ.S    CheckNoteKeys
  5781.     CMP    #12,D0
  5782.     BEQ.S    CheckNoteKeys
  5783.     CMP    #18,D0
  5784.     BEQ.S    CheckNoteKeys
  5785.     TST.L    EditMode
  5786.     BNE    EditCommand
  5787.     RTS
  5788.  
  5789. CheckNoteKeys
  5790.     LEA    RawKeyScaleTable,A0
  5791.     MOVE.B    RawKeyCode,D1
  5792.     MOVEQ    #38,D0
  5793. cnkloop    CMP.B    0(A0,D0.W),D1
  5794.     BEQ.S    NoteKeyPressed
  5795.     DBF    D0,cnkloop
  5796.     RTS
  5797.  
  5798. NoteKeyPressed
  5799.     CLR.B    RawKeyCode
  5800.     MOVE.L    KeyTransTabPtr,A1
  5801.     MOVE.B    (A1,D0.W),D0
  5802.     CMP    #36,D0
  5803.     BHS.S    nkpskip
  5804.     MOVE.L    SplitAddress,D1
  5805.     BEQ.S    nkpskip
  5806.     CLR.L    SplitAddress
  5807.     MOVE.L    D1,A0
  5808.     MOVE.B    D0,(A0)
  5809.     MOVE    SamNoteType,D1
  5810.     BEQ    ShowSplit
  5811.     CLR    SamNoteType
  5812.     AND    #$FF,D0
  5813.     MOVE    D0,(A0)
  5814.     CMP    #1,D1
  5815.     BEQ.S    loclab1
  5816.     CMP    #3,D1
  5817.     BEQ    ShowS2TuneNote
  5818.     CMP    #4,D1
  5819.     BEQ    ShowAllRight
  5820.     JMP    ShowResamNote
  5821. loclab1    JMP    ShowSamNote
  5822. nkpskip    MOVE    InsNum,PlayInsNum
  5823.     TST.B    SplitFlag
  5824.     BEQ.S    nkpskip2
  5825.     LEA    SplitInstrTable,A1
  5826.     MOVE.B    (A1,D0.W),D1
  5827.     BEQ.S    nkpskip3
  5828.     MOVE.B    D1,PlayInsNum+1
  5829. nkpskip3
  5830.     LEA    SplitTransTable,A1
  5831.     MOVE.B    (A1,D0.W),D0
  5832. nkpskip2
  5833.     MOVEQ    #0,D2
  5834. playtheinstr
  5835.     LEA    PeriodTable,A1 ; note in d0 here
  5836.     MOVE.L    D0,D4
  5837.     LSL    #1,D0
  5838.     MOVEQ    #0,D3
  5839.     MOVE    (A1,D0.W),D3
  5840.  
  5841.     MOVE.L    SongDataPtr,A0 ; This fixes finetune...
  5842.     LEA    14(A0),A0
  5843.     MOVE    InsNum,D1
  5844.     BNE.S    nkpskipit
  5845.     MOVE    LastInsNum,D1
  5846. nkpskipit
  5847.     MULU    #30,D1
  5848.     ADD.L    D1,A0
  5849.     MOVEQ    #0,D1
  5850.     MOVE.B    (A0),D1 ; get finetune
  5851.     MULU    #37*2,D1
  5852.     ADD.L    D1,A1
  5853.     MOVE    (A1,D0.W),CurrentPlayNote
  5854.     TST.L    D2
  5855.     BEQ.S    nkpnrml
  5856.     CMP.B    #2,pnoteflag
  5857.     BNE    antpskip
  5858.  
  5859. nkpnrml    TST.L    EditMode
  5860.     BEQ    antpskip
  5861. AddNoteToPattern
  5862.     MOVE.L    SongDataPtr,A0
  5863.     LEA    sd_patterndata(A0),A0    ; Find first pattern
  5864.     MOVE.L    PatternNumber,D0
  5865.     LSL.L    #8,D0
  5866.     LSL.L    #2,D0
  5867.     ADD.L    D0,A0    ; Find current pattern
  5868.     MOVEQ    #0,D0
  5869.     MOVE    ScrPattPos,D0
  5870.     BSR    QuantizeCheck
  5871.     LSL    #4,D0
  5872.     EXT.L    D0
  5873.     ADD.L    D0,A0    ; Find current pos
  5874.     MOVE    PattCurPos,D0
  5875.     DIVU    #6,D0
  5876.     LSL    #2,D0
  5877.     EXT.L    D0
  5878.     ADD.L    D0,A0    ; Find current channel
  5879.     TST    AltKeyStatus
  5880.     BEQ.S    antpsks
  5881.     AND.L    #$FFFFF000,(A0)
  5882.     MOVE    InsEfx,D0
  5883.     OR    D0,2(A0)
  5884.     BRA.S    antp3
  5885. antpsks    TST    ShiftKeyStatus
  5886.     BEQ.S    antpskip2
  5887.     CLR.L    (A0)
  5888. antpskip2
  5889.     MOVE    D3,(A0)    ; Put note into pattern
  5890.     BEQ.S    antp2
  5891.     TST.B    AutoInsFlag
  5892.     BEQ.S    antp4
  5893.     MOVE    VolumeEfx,2(A0)
  5894. antp4    MOVEQ    #0,D0
  5895.     MOVE    PlayInsNum,D0
  5896.     LSL    #4,D0
  5897.     AND.B    #$F,2(A0)
  5898.     ADD.B    D0,2(A0)
  5899.     LSL    #4,D0
  5900.     AND    #$F000,D0
  5901.     OR    D0,(A0)
  5902.     BRA.S    antp3
  5903.  
  5904. antp2    AND    #$0FFF,2(A0)
  5905. antp3    MOVE    2(A0),CurrCmds
  5906.     MOVE.L    NoteNamesPtr,A0
  5907.     LSL    #2,D4
  5908.     EXT.L    D4
  5909.     ADD.L    D4,A0
  5910.     MOVE.L    A0,ShowTextPtr
  5911.     MOVE    #3,TextLength
  5912.     MOVEQ    #0,D0
  5913.     MOVE    ScrPattPos,D0
  5914.     BSR    QuantizeCheck
  5915.     MULU    #7*40,D0
  5916.     MOVEQ    #0,D1
  5917.     MOVE    PattCurPos,D1
  5918.     DIVU    #6,D1
  5919.     MULU    #9,D1
  5920.     ADD.L    D1,D0
  5921.     ADD    #7524,D0
  5922.     MOVE    D0,TextOffset
  5923.     TST    AltKeyStatus
  5924.     BEQ.S    antpnot
  5925.     ADDQ    #4,D0
  5926.     MOVE    D0,TextOffset
  5927.     BRA.S    antpalt
  5928. antpnot    BSR    ShowText    ; Show notename
  5929.     BSR    PrintHiInstrNum
  5930. antpalt
  5931.     MOVE    CurrCmds,WordNumber
  5932.     BSR    PrintHexWord
  5933.     BSR    EditMoveDown
  5934. antpskip
  5935.     TST    DidQuantize
  5936.     BNE.S    testmul
  5937.     TST    CurrentPlayNote
  5938.     BNE    PlayNote
  5939. testmul    TST.B    MultiFlag
  5940.     BEQ    Return1
  5941. GotoNextMulti
  5942.     MOVEQ    #0,D0
  5943.     MOVE    PattCurPos,D0
  5944.     DIVU    #6,D0
  5945.     LEA    MultiModeNext,A0
  5946.     MOVE.B    (A0,D0.W),D0
  5947.     SUBQ    #1,D0
  5948.     AND    #3,D0
  5949.     MULU    #6,D0
  5950.     MOVE    D0,PattCurPos
  5951.     BRA    UpdateCursorPos
  5952.  
  5953. QuantizeCheck
  5954.     TST.L    RunMode
  5955.     BEQ.S    qcend
  5956.     MOVEQ    #0,D1
  5957.     MOVE.B    QuantizeValue,D1
  5958.     BEQ.S    qcend
  5959.     CMP    #1,D1
  5960.     BEQ.S    QuanOne
  5961.     MOVE    #1,DidQuantize
  5962.     MOVE.L    D1,D2
  5963.     LSR    #1,D2
  5964.     ADD    D0,D2
  5965.     AND    #$003F,D2
  5966.     DIVU    D1,D2
  5967.     MULU    D1,D2
  5968.     CMP    D0,D2
  5969.     BHI.S    qcskip
  5970.     CLR    DidQuantize
  5971. qcskip    MOVE    D2,D0
  5972.     RTS
  5973.  
  5974. QuanOne    MOVE.L    CurrSpeed,D1
  5975.     LSR.L    #1,D1
  5976.     CMP.L    Counter,D1
  5977.     BLS.S    QuantToNextNote
  5978. qcend    CLR    DidQuantize
  5979.     RTS
  5980.  
  5981. QuantToNextNote
  5982.     ADDQ    #1,D0
  5983.     AND    #$003F,D0
  5984.     MOVE    #1,DidQuantize
  5985.     RTS
  5986.  
  5987. PlayNote
  5988.     CMP    #18,PattCurPos
  5989.     BNE.S    ChkChan3
  5990.     LEA    $DFF0D0,A5
  5991.     LEA    audchan4temp,A4
  5992.     BRA.S    DoPlayNote
  5993.  
  5994. ChkChan3
  5995.     CMP    #12,PattCurPos
  5996.     BNE.S    ChkChan2
  5997.     LEA    $DFF0C0,A5
  5998.     LEA    audchan3temp,A4
  5999.     BRA.S    DoPlayNote
  6000.  
  6001. ChkChan2
  6002.     CMP    #6,PattCurPos
  6003.     BNE.S    ChkChan1
  6004.     LEA    $DFF0B0,A5
  6005.     LEA    audchan2temp,A4
  6006.     BRA.S    DoPlayNote
  6007.  
  6008. ChkChan1
  6009.     TST    PattCurPos
  6010.     BNE    Return1
  6011.     LEA    $DFF0A0,A5
  6012.     LEA    audchan1temp,A4
  6013. DoPlayNote
  6014.     MOVE.L    A5,NoteAddr
  6015.     LEA    SampleInfo,A6
  6016.     MOVE    PlayInsNum,D0
  6017.     BEQ.S    dpnplay
  6018.     LSL.L    #2,D0
  6019.     LEA    SamplePtrs,A0
  6020.     LEA    SampleInfo2,A6
  6021.     MOVE.L    0(A0,D0.W),si_pointer2
  6022.     MOVE.L    SongDataPtr,A0
  6023.     LEA    -10(A0),A0
  6024.     MOVE    PlayInsNum,D0
  6025.     MOVE.B    D0,PlayInsNum2
  6026.     MULU    #30,D0
  6027.     ADD.L    D0,A0
  6028.     MOVE.L    22(A0),SampleInfo2
  6029.     MOVE.L    26(A0),si_long2
  6030. dpnplay    MOVE.B    PlayInsNum2,n_samplenum(A4)
  6031.     MOVE    4(A6),D0        ; repeat
  6032.     BNE.S    dpn2
  6033.     MOVE    (A6),D0            ; length
  6034.     BRA.S    dpn3
  6035. dpn2    ADD    6(A6),D0        ; add replen
  6036. dpn3    MOVEQ    #0,D1
  6037.     MOVE.B    3(A6),D1
  6038.     MOVE    D1,8(A5)        ; Set volume
  6039.     MOVE.B    D1,n_volume(A4)
  6040.     MOVE    CurrentPlayNote,6(A5)    ; Set period
  6041.     MOVE    CurrentPlayNote,n_period(A4)
  6042.     MOVE    n_dmabit(A4),$DFF096    ; Channel DMA off
  6043.     MOVE.L    8(A6),D1
  6044.     ADD.L    StartOfs,D1
  6045.     MOVE.L    D1,(A5)            ; Set sampledata pointer
  6046.     CLR.L    StartOfs
  6047.     MOVE.L    D1,n_start(A4)
  6048.     MOVE    D0,4(A5)        ; Set length
  6049.     MOVE    D0,n_length(A4)
  6050.     BNE.S    dpnnz
  6051.     MOVEQ    #1,D0
  6052.     MOVE    D0,4(A5)
  6053.     MOVE    D0,n_length(A4)
  6054. dpnnz    MOVE    CurrentPlayNote,D0
  6055.     BSR    PlayNoteAnalyze
  6056.  
  6057.     JSR    DMAWaitLoop
  6058.  
  6059.     MOVE    n_dmabit(A4),D0
  6060.     AND    ActiveChannels,D0
  6061.     OR    #$8000,D0
  6062.     MOVE    D0,$DFF096    ; Turn DMA back on
  6063.  
  6064.     JSR    DMAWaitLoop
  6065.  
  6066.     MOVEQ    #0,D1
  6067.     MOVE    4(A6),D1    ; repeat*2
  6068.     ADD.L    D1,D1
  6069.     ADD.L    8(A6),D1    ; + startptr
  6070.     MOVE.L    D1,(A5)        ; Set loop pointer
  6071.     MOVE.L    D1,n_loopstart(A4)
  6072.     MOVE    6(A6),4(A5)    ; Set loop length
  6073.     MOVE    6(A6),n_replen(A4)
  6074.     ST    n_trigger(A4)
  6075.     BRA    testmul
  6076.  
  6077. PlayInsNum2    dc.b 0,0
  6078.  
  6079. ;---- Check Cursor Arrow Keys ----
  6080.  
  6081. ArrowKeys
  6082.     CMP.B    #4,EnterTextFlag
  6083.     BEQ    Return1
  6084.     MOVE.B    RawKeyCode,D0
  6085.     TST    GetLineFlag
  6086.     BNE.S    arkeskip
  6087.     TST    ShiftKeyStatus
  6088.     BNE.S    arkeskip
  6089.     TST    AltKeyStatus
  6090.     BNE.S    arkeskip
  6091.     CMP    #2,CurrScreen
  6092.     BEQ.S    arkeskip
  6093.     CMP.B    #78,D0
  6094.     BEQ    RightArrow
  6095.     CMP.B    #79,D0
  6096.     BEQ    LeftArrow
  6097. arkeskip
  6098.     CMP.B    #76,D0
  6099.     BEQ.S    UpArrow
  6100.     CMP.B    #77,D0
  6101.     BEQ    DownArrow
  6102.     CLR    ArrowPressed
  6103.     RTS
  6104.  
  6105. ArrowPressed    dc.w    0
  6106. ArrowRepCounter    dc.w    0
  6107.  
  6108. UpArrow    TST.L    RunMode
  6109.     BNE    Return1
  6110.     CMP    #2,CurrScreen
  6111.     BEQ    Return1
  6112.     CMP    #3,CurrScreen
  6113.     BEQ    Return1
  6114.     CMP    #4,CurrScreen
  6115.     BEQ    Return1
  6116.     CMP    #6,CurrScreen
  6117.     BEQ    Return1
  6118.     TST    ArrowPressed
  6119.     BEQ.S    MoveOneUp
  6120.     ADDQ    #1,ArrowRepCounter
  6121.     TST    AltKeyStatus
  6122.     BNE.S    AltUpArrow
  6123.     TST    ShiftKeyStatus
  6124.     BNE.S    ShiftUpArrow
  6125.     CMP    #6,ArrowRepCounter
  6126.     BPL.S    MoveOneUp
  6127.     RTS
  6128.  
  6129. ShiftUpArrow
  6130.     CMP    #3,ArrowRepCounter
  6131.     BPL.S    MoveOneUp
  6132.     RTS
  6133.  
  6134. AltUpArrow
  6135.     CMP    #1,ArrowRepCounter
  6136.     BPL.S    MoveOneUp
  6137.     RTS
  6138.  
  6139. MoveOneUp
  6140.     CLR    ArrowRepCounter
  6141.     MOVE    #$FFFF,ArrowPressed
  6142.     CMP.L    #'patt',RunMode
  6143.     BEQ    Return1
  6144.     SUBQ    #1,ScrPattPos
  6145.     AND    #$003F,ScrPattPos
  6146.     BRA    SetScrPatternPos
  6147.  
  6148. DownArrow
  6149.     TST.L    RunMode
  6150.     BNE    Return1
  6151.     CMP    #2,CurrScreen
  6152.     BEQ    Return1
  6153.     CMP    #3,CurrScreen
  6154.     BEQ    Return1
  6155.     CMP    #4,CurrScreen
  6156.     BEQ    Return1
  6157.     CMP    #6,CurrScreen
  6158.     BEQ    Return1
  6159.     TST    ArrowPressed
  6160.     BEQ.S    MoveOneDown
  6161.     ADDQ    #1,ArrowRepCounter
  6162.     TST    AltKeyStatus
  6163.     BNE.S    AltDownArrow
  6164.     TST    ShiftKeyStatus
  6165.     BNE.S    ShiftDownArrow
  6166.     CMP    #6,ArrowRepCounter
  6167.     BPL.S    MoveOneDown
  6168.     RTS
  6169.  
  6170. ShiftDownArrow
  6171.     CMP    #3,ArrowRepCounter
  6172.     BPL.S    MoveOneDown
  6173.     RTS
  6174.  
  6175. AltDownArrow
  6176.     CMP    #1,ArrowRepCounter
  6177.     BPL.S    MoveOneDown
  6178.     RTS
  6179.  
  6180. MoveOneDown
  6181.     CLR    ArrowRepCounter
  6182.     MOVE    #$FFFF,ArrowPressed
  6183.     TST.L    RunMode
  6184.     BNE    Return1
  6185.     ADDQ    #1,ScrPattPos
  6186.     AND    #$003F,ScrPattPos
  6187.     BRA    SetScrPatternPos
  6188.  
  6189. EditMoveDown
  6190.     TST.L    RunMode
  6191.     BNE    Return1
  6192.     MOVE    EditMoveAdd,D0
  6193.     ADD    D0,ScrPattPos
  6194.     AND    #$003F,ScrPattPos
  6195.     BRA    SetScrPatternPos
  6196.  
  6197. EditMoveAdd    dc.w 1
  6198.  
  6199. RightArrow
  6200.     TST    ArrowPressed
  6201.     BEQ.S    MoveOneRight
  6202.     ADDQ    #1,ArrowRepCounter
  6203.     CMP    #6,ArrowRepCounter
  6204.     BPL.S    MoveOneRight
  6205.     RTS
  6206.  
  6207. PatternOneUp
  6208.     ADDQ.L    #1,PatternNumber
  6209.     AND.L    #$3F,PatternNumber
  6210.     JSR    Wait_4000
  6211.     BRA    RedrawPattern
  6212.  
  6213. MoveOneRight
  6214.     CLR    ArrowRepCounter
  6215.     MOVE    #$FFFF,ArrowPressed
  6216.     ADDQ    #1,PattCurPos
  6217.     CMP    #24,PattCurPos
  6218.     BMI.S    morskip
  6219.     CLR    PattCurPos
  6220. morskip    BRA.S    UpdateCursorPos
  6221.  
  6222. LeftArrow
  6223.     TST    ArrowPressed
  6224.     BEQ.S    MoveOneLeft
  6225.     ADDQ    #1,ArrowRepCounter
  6226.     CMP    #6,ArrowRepCounter
  6227.     BPL.S    MoveOneLeft
  6228.     RTS
  6229.  
  6230. PatternOneDown
  6231.     SUBQ.L    #1,PatternNumber
  6232.     AND.L    #$3F,PatternNumber
  6233.     JSR    Wait_4000
  6234.     BRA    RedrawPattern
  6235.  
  6236. MoveOneLeft
  6237.     CLR    ArrowRepCounter
  6238.     MOVE    #$FFFF,ArrowPressed
  6239.     SUBQ    #1,PattCurPos
  6240.     TST    PattCurPos
  6241.     BPL    UpdateCursorPos
  6242.     MOVE    #23,PattCurPos
  6243. UpdateCursorPos
  6244.     TST    SamScrEnable
  6245.     BNE    Return1
  6246.     MOVE    PattCurPos,D0
  6247.     LEA    CursorPosTable,A0
  6248.     MOVE.B    0(A0,D0.W),D0
  6249.     LSL    #3,D0
  6250.     ADD    #9,D0
  6251.     MOVE    #$BD,D1
  6252.     MOVEQ    #14,D2 ; 14 lines
  6253.     LEA    CursorSpriteData,A0
  6254.     BRA    SetSpritePos
  6255.  
  6256. ArrowKeys2
  6257.     MOVE.B    RawKeyCode,D0
  6258.     CMP.B    #76,D0
  6259.     BEQ.S    UpArrow2
  6260.     CMP.B    #77,D0
  6261.     BEQ.S    DownArrow2
  6262.     CMP.B    #79,D0
  6263.     BEQ.S    LeftArrow2
  6264.     CMP.B    #78,D0
  6265.     BEQ    RightArrow2
  6266.     RTS
  6267.  
  6268. UpArrow2
  6269.     CMP    #2,CurrScreen
  6270.     BEQ    HelpUp
  6271.     CMP    #3,CurrScreen
  6272.     BEQ    FileNameOneUp
  6273.     CMP    #4,CurrScreen
  6274.     BNE.s    .no1up
  6275.         JMP    PED_OneUp
  6276. .no1up    CMP    #6,CurrScreen
  6277.     BNE.s    .plst1up
  6278.         JMP    PLSTOneUp
  6279. .plst1up
  6280.     RTS
  6281.  
  6282. DownArrow2
  6283.     CMP    #2,CurrScreen
  6284.     BEQ    HelpDown
  6285.     CMP    #3,CurrScreen
  6286.     BEQ    FileNameOneDown
  6287.     CMP    #4,CurrScreen
  6288.     BNE.s    .ped1d
  6289.         JMP    PED_OneDown
  6290. .ped1d    CMP    #6,CurrScreen
  6291.     BNE.s    .plst1d
  6292.         JMP    PLSTOneDown
  6293. .plst1d    RTS
  6294.  
  6295. LeftArrow2
  6296.     TST    ShiftKeyStatus
  6297.     BNE    PositionDown
  6298.     TST    AltKeyStatus
  6299.     BNE    PatternOneDown
  6300.     TST    CtrlKeyStatus
  6301.     BNE    SampleNumDown
  6302.     CMP    #2,CurrScreen
  6303.     BEQ    HelpLeft
  6304.     RTS
  6305.  
  6306. RightArrow2
  6307.     TST    ShiftKeyStatus
  6308.     BNE    PositionUp
  6309.     TST    AltKeyStatus
  6310.     BNE    PatternOneUp
  6311.     TST    CtrlKeyStatus
  6312.     BNE    SampleNumUp
  6313.     CMP    #2,CurrScreen
  6314.     BEQ    HelpRight
  6315.     RTS
  6316.  
  6317. ;---- Update Line Cursor Position ----
  6318.  
  6319. UpdateLineCurPos
  6320.     MOVE    LineCurX,D0
  6321.     MOVE    LineCurY,D1
  6322.     SUBQ    #1,D0
  6323.     MOVEQ    #2,D2
  6324.     LEA    LineCurSpriteData,A0
  6325.     BRA    SetSpritePos
  6326.  
  6327. ;---- Check Gadgets ----
  6328.  
  6329. CheckGadgets
  6330.     BSR    UpdatePointerPos
  6331.     BSR    CheckGadgets2
  6332.     BSR    CheckPitchControl
  6333.  
  6334.     CLR    notogfl
  6335.     CMP    #$FFFF,GadgRepeat
  6336.     BEQ.S    CgRepeat
  6337.     MOVEQ    #0,D0
  6338. cgloop    ADDQ.L    #1,D0
  6339.     TST.B    HHFlag
  6340.     BEQ.S    cgnorma
  6341.     CMP.L    #40000*5,D0
  6342.     BEQ.S    CgRepeat
  6343.     BRA.S    cgnorm2
  6344. cgnorma    CMP.L    #40000,D0
  6345.     BEQ.S    CgRepeat
  6346. cgnorm2    BTST    #6,$BFE001
  6347.     BEQ.S    cgloop
  6348.     CLR    UpOrDown
  6349.     BRA    MainLoop
  6350.  
  6351. CgRepeat
  6352.     TST.B    HHFlag
  6353.     BEQ.S    cgrepe2
  6354.     JSR    Wait_4000
  6355. cgrepe2    MOVE    #$FFFF,GadgRepeat
  6356.     BTST    #6,$BFE001
  6357.     BEQ.S    CheckGadgets
  6358.     CLR    GadgRepeat
  6359.     CLR    UpOrDown
  6360.     BRA    MainLoop
  6361.  
  6362. CheckGadgets2
  6363.     MOVE    MouseX,MouseX2
  6364.     BNE.S    cgskip
  6365.     TST    MouseY
  6366.     BNE.S    cgskip
  6367. ChkQuit    LEA    QuitPTText,A0
  6368.     BSR    AreYouSure
  6369.     BEQ    ExitCleanup    ; Quit PT!
  6370.     RTS
  6371. cgskip    MOVE    MouseY,MouseY2
  6372.     CMP    #4,CurrScreen
  6373.     BEQ    CheckPresEdGadgs
  6374.     MOVE    MouseX2,D0
  6375.     MOVE    MouseY2,D1
  6376.     CMP    #122,D1
  6377.     BHS    WantedPattGadg
  6378.     CMP    #111,D1
  6379.     BHS    CheckSmplNamOrLoad
  6380.     CMP    #100,D1
  6381.     BHS    TypeInSongName
  6382.     CMP    #120,D0
  6383.     BLO.S    cgskip2
  6384.     CMP    #6,CurrScreen
  6385.     BEQ    CheckPLSTGadgs
  6386. cgskip2    CMP    #2,CurrScreen
  6387.     BEQ    Return1
  6388.     CMP    #3,CurrScreen    ; Screen 3 is DirScreen...
  6389.     BEQ    CheckDirGadgets
  6390.     CMP    #5,CurrScreen
  6391.     BEQ    CheckSetupGadgs
  6392.     CMP    #7,CurrScreen
  6393.     BEQ    CheckSetup2Gadgs
  6394.     CMP    #45,D1
  6395.     BHS.S    cgskip3
  6396.     CMP    #306,D0
  6397.     BHS    CheckToggle
  6398.     CMP    #244,D0
  6399.     BHS    MainMenu3
  6400.     CMP    #211,D0
  6401.     BHS    MainMenu2b
  6402.     CMP    #181,D0
  6403.     BHS    MainMenu2
  6404.     CMP    #120,D0
  6405.     BHS    MainMenu1
  6406. cgskip3    CMP    #120,D0
  6407.     BHS.S    cgskip4
  6408.     CMP    #109,D0
  6409.     BHS    DownGadgets
  6410.     CMP    #98,D0
  6411.     BHS    UpGadgets
  6412.     CMP    #62,D0
  6413.     BHS    EnterNumGadg
  6414.  
  6415.     BRA    PosInsDelGadgs
  6416. cgskip4    TST.B    EdEnable
  6417.     BNE    CheckEditOpGadgs
  6418.     BSR    ToggleAnaScope
  6419.     RTS
  6420.  
  6421.  
  6422.  
  6423. ;-----------------------------------------------------------------------
  6424. CheckPitchControl
  6425.     TST    SamScrEnable
  6426.     BNE    .not
  6427.  
  6428.     MOVE    MouseX,D0
  6429.     MOVE    MouseY,D1
  6430.  
  6431.     CMP    #PitchCtrlYPos,D1
  6432.     BLT    .not
  6433.     CMP    #PitchCtrlYPos+PitchCtrlSize,D1
  6434.     BGT    .not
  6435.     lsr    #3,d0
  6436.  
  6437.     btst    #10,$dff016
  6438.     bne.s    .noright
  6439.     CMP    #PitchCtrl0x,D0
  6440.     BLS    .ClrPitchCtrl0
  6441.     CMP    #PitchCtrl1x,D0
  6442.     BLS    .ClrPitchCtrl1
  6443.     CMP    #PitchCtrl2x,D0
  6444.     BLS    .ClrPitchCtrl2
  6445.     CMP    #PitchCtrl3x,D0
  6446.     BLS    .ClrPitchCtrl3
  6447.  
  6448. .noright
  6449.     CMP    #PitchCtrl0x,D0
  6450.     BLS    .PitchCtrl0
  6451.     CMP    #PitchCtrl1x,D0
  6452.     BLS    .PitchCtrl1
  6453.     CMP    #PitchCtrl2x,D0
  6454.     BLS    .PitchCtrl2
  6455.     CMP    #PitchCtrl3x,D0
  6456.     BLS    .PitchCtrl3
  6457. .not    RTS        
  6458.  
  6459. .PitchCtrl0
  6460.     bsr    PitchControlUndraw
  6461.     sub    #PitchCtrlYPos,d1
  6462.     move    d1,PitchCtrl        ;set current channel <- y value
  6463.     bsr    PitchControlDraw
  6464.     rts
  6465.  
  6466. .PitchCtrl1
  6467.     bsr    PitchControlUndraw
  6468.     sub    #PitchCtrlYPos,d1
  6469.     move    d1,PitchCtrl+2        ;set current channel <- y value
  6470.     bsr    PitchControlDraw
  6471.     rts
  6472.  
  6473. .PitchCtrl2
  6474.     bsr    PitchControlUndraw
  6475.     sub    #PitchCtrlYPos,d1
  6476.     move    d1,PitchCtrl+4        ;set current channel <- y value
  6477.     bsr    PitchControlDraw
  6478.     rts
  6479.  
  6480. .PitchCtrl3
  6481.     bsr    PitchControlUndraw
  6482.     sub    #PitchCtrlYPos,d1
  6483.     move    d1,PitchCtrl+6        ;set current channel <- y value
  6484.     bsr    PitchControlDraw
  6485.     rts
  6486.  
  6487. .ClrPitchCtrl0
  6488.     bsr    PitchControlUndraw
  6489.     move    #PitchCtrlSize>>1,PitchCtrl    ;set current channel <- y value
  6490.     bsr    PitchControlDraw
  6491.     rts
  6492.  
  6493. .ClrPitchCtrl1
  6494.     bsr    PitchControlUndraw
  6495.     move    #PitchCtrlSize>>1,PitchCtrl+2    ;set current channel <- y value
  6496.     bsr    PitchControlDraw
  6497.     rts
  6498.  
  6499. .ClrPitchCtrl2
  6500.     bsr    PitchControlUndraw
  6501.     move    #PitchCtrlSize>>1,PitchCtrl+4    ;set current channel <- y value
  6502.     bsr    PitchControlDraw
  6503.     rts
  6504.  
  6505. .ClrPitchCtrl3
  6506.     bsr    PitchControlUndraw
  6507.     move    #PitchCtrlSize>>1,PitchCtrl+6    ;set current channel <- y value
  6508.     bsr    PitchControlDraw
  6509.     rts
  6510.  
  6511.  
  6512.  
  6513.  
  6514. PitchUnDraw    macro
  6515.     move    PitchCtrl+(\1<<1),d0    ;read pitch
  6516.     mulu    #ScreenWidth,d0
  6517.     add    #PitchCtrl\1Pos,d0
  6518.     lea    BitPlaneData,a0
  6519.     and.b    #%11000011,(a0,d0.w)
  6520.     add    #ScreenWidth,d0
  6521.     and.b    #%11000011,(a0,d0.w)
  6522.     endm
  6523. PitchDraw    macro
  6524.     move    PitchCtrl+(\1<<1),d0    ;read pitch
  6525.     mulu    #ScreenWidth,d0
  6526.     add    #PitchCtrl\1Pos,d0
  6527.     lea    BitPlaneData,a0
  6528.     or.b    #%00111100,(a0,d0.w)
  6529.     add    #ScreenWidth,d0
  6530.     or.b    #%00111100,(a0,d0.w)
  6531.     endm
  6532. PitchControlUndraw
  6533.     movem.l    a0/d0,-(sp)
  6534.     PitchUnDraw    0
  6535.     PitchUnDraw    1
  6536.     PitchUnDraw    2
  6537.     PitchUnDraw    3
  6538.     movem.l    (sp)+,d0/a0
  6539.     rts
  6540.  
  6541. ;-------------- redraw vertical bars
  6542. RedrawPitchCtrl
  6543.     TST    SamScrEnable
  6544.     BEQ    PitchControlDraw
  6545.         RTS
  6546. PitchControlDraw
  6547.     movem.l    a0/d0,-(sp)
  6548.     PitchDraw    0
  6549.     PitchDraw    1
  6550.     PitchDraw    2
  6551.     PitchDraw    3
  6552.     movem.l    (sp)+,d0/a0
  6553.     rts
  6554.  
  6555.  
  6556. ;-------------- Sets hardware period value
  6557. SetPitchCtrl    macro
  6558.     move    PitchCtrl+((\1-1)<<1),d0    ;read pitch offset
  6559.     sub    #PitchCtrlSize>>1,d0
  6560.     add    d0,d0                ;scale pitch_ctrl range
  6561.     add    audchan\1temp+n_period,d0
  6562.     move    d0,$dff0a6+((\1-1)<<4)        ;Set hardware period
  6563.     endm
  6564. SetNewPitchCtrl
  6565.     move.l    d0,-(sp)
  6566.     SetPitchCtrl    1
  6567.     SetPitchCtrl    2
  6568.     SetPitchCtrl    3
  6569.     SetPitchCtrl    4
  6570.     move.l    (sp)+,d0
  6571.     rts
  6572.  
  6573.  
  6574. PitchCtrl    dc.w    PitchCtrlSize>>1
  6575.         dc.w    PitchCtrlSize>>1
  6576.         dc.w    PitchCtrlSize>>1
  6577.         dc.w    PitchCtrlSize>>1
  6578.  
  6579.  
  6580.  
  6581.  
  6582.  
  6583.  
  6584.  
  6585.  
  6586.  
  6587.  
  6588. ;----------------------------------
  6589. MainMenu3
  6590.     MOVE    MouseY2,D0
  6591.     CMP    #34,D0
  6592.     BHS    DPMGFIH
  6593.     CMP    #23,D0
  6594.     BHS    Setup
  6595.     CMP    #12,D0
  6596.     BHS    PresetEditor
  6597.     TST    D0
  6598.     BHS    PLST
  6599.     RTS
  6600.  
  6601. DPMGFIH    JMP    SamplerScreen
  6602.  
  6603. MainMenu2b
  6604.     MOVE    MouseY2,D0
  6605.     CMP    #3,CurrScreen
  6606.     BNE    mm2bskip
  6607.     CMP    #44,D0
  6608.     BHS    CheckDirGadgets2
  6609. mm2bskip
  6610.     CMP    #44,D0
  6611.     BHS    Return1
  6612.     CMP    #34,D0
  6613.     BHS    ShowDirScreen
  6614.     CMP    #23,D0
  6615.     BHS    DoEditOp
  6616.     CMP    #12,D0
  6617.     BHS    ClearAll
  6618.     TST    D0
  6619.     BHS    StopIt
  6620.     RTS
  6621.  
  6622. MainMenu2
  6623.     MOVE    MouseY2,D0
  6624.     CMP    #3,CurrScreen
  6625.     BNE    mm2skip
  6626.     CMP    #44,D0
  6627.     BHS    CheckDirGadgets2
  6628. mm2skip    CMP    #44,D0
  6629.     BHS    Return1
  6630.     CMP    #34,D0
  6631.     BHS    ContRecPatt
  6632.     CMP    #23,D0
  6633.     BHS    DoEditOp
  6634.     CMP    #12,D0
  6635.     BHS    ContPlayPatt
  6636.     TST    D0
  6637.     BHS    ContPlaySong
  6638.     RTS
  6639.  
  6640. MainMenu1
  6641.     MOVE    MouseY2,D0
  6642.     CMP    #3,CurrScreen
  6643.     BNE.S    mm1skip
  6644.     CMP    #44,D0
  6645.     BHS    CheckDirGadgets2
  6646. mm1skip    CMP    #44,D0
  6647.     BHS    Return1
  6648.     CMP    #34,D0
  6649.     BHS    NormalRecordPattern
  6650.     CMP    #23,D0
  6651.     BHS    NormalEdit
  6652.     CMP    #12,D0
  6653.     BHS    NormalPlayPatt
  6654.     TST    D0
  6655.     BHS    NormalPlaySong
  6656.     RTS
  6657.  
  6658.  
  6659. NormalPlaySong    LEA    NormalPlayText(pc),A0
  6660.         BSR    ShowStatusText
  6661.         BRA    PlaySong
  6662. NormalPlayPatt    LEA    NormalPattText(pc),A0
  6663.         BSR    ShowStatusText
  6664.         BRA    PlayPattern
  6665. NormalRecordPattern
  6666.         LEA    NormalRecText(pc),A0
  6667.         BSR    ShowStatusText
  6668.         BRA    RecordPattern
  6669. NormalEdit    LEA    NormalEditText(pc),A0
  6670.         BSR    ShowStatusText
  6671.         BRA    Edit
  6672.  
  6673.  
  6674. SerialPlaySong    move.b    #'1',SerialByte
  6675.         bsr    SendSerial
  6676.         bsr    PlaySong
  6677.         LEA    SerialPlayText(pc),A0
  6678.         JSR    ShowStatusText
  6679.         rts
  6680. SerialPlayPattern
  6681.         move.b    #'2',SerialByte
  6682.         bsr    SendSerial
  6683.         bsr    PlayPattern
  6684.         LEA    SerialPattText(pc),A0
  6685.         JSR    ShowStatusText
  6686.         rts
  6687. SerialRecordPattern
  6688.         move.b    #'3',SerialByte
  6689.         bsr    SendSerial
  6690.         bsr    RecordPattern
  6691.         LEA    SerialRecText(pc),A0
  6692.         JSR    ShowStatusText
  6693.         rts
  6694. SerialStopIt    move.b    #'4',SerialByte
  6695.         bsr    SendSerial
  6696.         bsr    StopIt
  6697.         LEA    SerialStopText(pc),A0
  6698.         JSR    ShowStatusText
  6699.         rts
  6700.  
  6701.  
  6702. ;---- Disk Format ----
  6703. DiskFormatGadg
  6704.     BSR    WaitForButtonUp
  6705.     JSR    Wait_4000
  6706.     BSR    ClearFileNames
  6707.     BSR    SwapFormatBox
  6708.     BSR    WaitForButtonUp
  6709.     LEA    AreYouSureText,A0
  6710.     BSR    ShowStatusText
  6711. fmtbuttonchk
  6712.     BSR    DoKeyBuffer
  6713.     MOVE.B    RawKeyCode,D0
  6714.     CMP.B    #69,D0 ; ESC
  6715.     BEQ.S    fmtbend
  6716.     BTST    #6,$BFE001
  6717.     BNE.S    fmtbuttonchk
  6718.     MOVEM.W    MouseX,D0/D1
  6719.     CMP    #89,D0
  6720.     BLO.S    fmtbuttonchk
  6721.     CMP    #212,D0
  6722.     BHI.S    fmtbuttonchk
  6723.     CMP    #72,D1
  6724.     BLO.S    fmtbuttonchk
  6725.     CMP    #82,D1
  6726.     BHI.S    fmtbuttonchk
  6727.     CMP    #136,D0
  6728.     BLO.S    DiskFormat
  6729.     CMP    #166,D0
  6730.     BLO.S    fmtbuttonchk
  6731. fmtbend    BSR.S    SwapFormatBox
  6732.     BRA    SetErrorPtrCol
  6733.  
  6734. SwapFormatBox
  6735.     LEA    FormatBoxData,A1
  6736.     LEA    BitPlaneData+FormatBoxPos,A0
  6737.     MOVEQ    #38,D0
  6738. sfbloop1
  6739.     MOVEQ    #17,D1
  6740. sfbloop2
  6741.     MOVE.B    PlaneSize(A0),D2
  6742.     MOVE.B    702(A1),PlaneSize(A0)
  6743.     MOVE.B    D2,702(A1)
  6744.     MOVE.B    (A0),D2
  6745.     MOVE.B    (A1),(A0)+
  6746.     MOVE.B    D2,(A1)+
  6747.     DBF    D1,sfbloop2
  6748.     LEA    $0016(A0),A0
  6749.     DBF    D0,sfbloop1
  6750.     RTS
  6751.  
  6752. DiskFormat
  6753.     BSR    SwapFormatBox
  6754.     BSR    ShowAllRight
  6755.     BSR    ClearFileNames
  6756.     LEA    PlsEntNamText,A0
  6757.     MOVE    #2570,D1
  6758.     MOVEQ    #17,D0
  6759.     BSR    ShowText3
  6760.     LEA    OfVolumeText,A0
  6761.     MOVE.B    #'_',15(A0)
  6762.     MOVE.B    #'_',16(A0)
  6763.     MOVE    #2810,D1
  6764.     MOVEQ    #17,D0
  6765.     BSR    ShowText3
  6766.     BSR    SetWaitPtrCol
  6767.     LEA    DiskNumText1,A6
  6768.     MOVEQ    #1,D0
  6769. df_loop    CLR.B    0(A6,D0.W)
  6770.     DBF    D0,df_loop
  6771.     MOVE.L    A6,TextEndPtr
  6772.     MOVE.L    A6,ShowTextPtr
  6773.     ADDQ.L    #2,TextEndPtr
  6774.     MOVE.B    #1,EnterTextFlag
  6775.     MOVE    #2825,A4
  6776.     MOVE    #2,TextLength
  6777.     BSR    GetTextLine
  6778.     CLR.B    EnterTextFlag
  6779.     CLR.L    TextEndPtr
  6780.     BSR    ClearFileNames
  6781.     MOVE.L    4.W,A6
  6782.     MOVE.L    #5632,D0
  6783.     MOVEQ    #MEMF_CHIP,D1
  6784.     JSR    LVOAllocMem(A6)
  6785.     MOVE.L    D0,FormatDataPtr
  6786.     BEQ    df_memerr
  6787.     BSR    DoShowFreeMem
  6788.     SUB.L    A1,A1
  6789.     JSR    LVOFindTask(A6)
  6790.     MOVE.L    D0,ProcessPtr
  6791.     LEA    TrackdiskPort,A1
  6792.     JSR    LVOAddPort(A6)
  6793.     LEA    TrackdiskIOExtTD,A1
  6794.     MOVEQ    #0,D0
  6795.     MOVEQ    #0,D1
  6796.     LEA    TrackdiskName,A0
  6797.     JSR    LVOOpenDevice(A6)
  6798.     MOVE.L    #TrackdiskPort,TDPortPtr
  6799.     CLR    CylinderNumber
  6800.     LEA    TrackdiskIOExtTD,A1
  6801.     MOVE    #TD_CHANGESTATE,IO_COMMAND(A1)
  6802.     JSR    LVODoIO(A6)    ; Check if disk in drive
  6803.     TST.L    IO_ACTUAL(A1)
  6804.     BEQ.S    df_indrive
  6805.     LEA    NoDiskInDriveText,A0
  6806.     BSR    ShowStatusText
  6807.     MOVE    #50,WaitTime
  6808.     BSR    SetErrorPtrCol
  6809.     BRA    df_cleanup
  6810.  
  6811. df_indrive
  6812.     LEA    TrackdiskIOExtTD,A1
  6813.     MOVE    #TD_PROTSTATUS,IO_COMMAND(A1)
  6814.     JSR    LVODoIO(A6)    ; Check write protect
  6815.     TST.L    IO_ACTUAL(A1)
  6816.     BEQ.S    df_noprot
  6817.     LEA    WriteProtectedText,A0
  6818.     BSR    ShowStatusText
  6819.     MOVE    #50,WaitTime
  6820.     BSR    SetErrorPtrCol
  6821.     BRA    df_cleanup
  6822.  
  6823. df_noprot
  6824.     LEA    DiskFormatText,A0
  6825.     MOVE    #2581-7,D1
  6826.     MOVEQ    #11,D0
  6827.     BSR    ShowText3
  6828.     LEA    InProgressText,A0
  6829.     MOVE    #2821-7,D1
  6830.     MOVEQ    #11,D0
  6831.     BSR    ShowText3
  6832.     CLR.L    FmtDiskOffset
  6833.     MOVE.L    FormatDataPtr,FmtDataPtr
  6834.     MOVE.L    #$00001600,FmtDataSize
  6835.     BSR    ClearCylinder
  6836.     BSR    SetDiskPtrCol
  6837. df_formatloop
  6838.     LEA    FormattingCylText,A0
  6839.     BSR    ShowStatusText
  6840.     MOVE    CylinderNumber,D0
  6841.     LSR    #1,D0
  6842.     MOVE    D0,WordNumber
  6843.     BSR    Print2DecDigits
  6844.     MOVE.L    4.W,A6
  6845.     LEA    TrackdiskIOExtTD,A1
  6846.     MOVE    #TD_FORMAT,IO_COMMAND(A1)
  6847.     JSR    LVODoIO(A6)    ; Format cylinder
  6848.     LEA    VerifyingText,A0
  6849.     BSR    ShowStatusText
  6850.     MOVE    CylinderNumber,D0
  6851.     LSR    #1,D0
  6852.     MOVE    D0,WordNumber
  6853.     BSR    Print2DecDigits
  6854.     MOVE.L    4.W,A6
  6855.     LEA    TrackdiskIOExtTD,A1
  6856.     MOVE    #CMD_READ,IO_COMMAND(A1)
  6857.     JSR    LVODoIO(A6)    ; Read cylinder to verify
  6858.     TST.B    Fmt_hmmm
  6859.     BEQ.S    df_verifyok
  6860.     LEA    VerifyErrText(PC),A0
  6861.     BSR    ShowStatusText
  6862.     MOVE    #50,WaitTime
  6863.     BSR    SetErrorPtrCol
  6864.     BRA    df_cleanup
  6865.  
  6866. VerifyErrText    dc.b "Verify error!",0
  6867.  
  6868. df_verifyok
  6869.     ADD.L    #$1600,FmtDiskOffset
  6870.     ADDQ    #1,CylinderNumber
  6871.     CMP    #160,CylinderNumber
  6872.     BNE    df_formatloop
  6873.  
  6874.     LEA    InitDiskText,A0
  6875.     BSR    ShowStatusText
  6876.     BSR    ClearCylinder
  6877.     MOVE.L    FormatDataPtr,A2
  6878.     LEA    BootblockData(PC),A0
  6879.     MOVEQ    #12,D0
  6880. .loop    MOVE.L    (A0)+,(A2)+
  6881.     DBF    D0,.loop
  6882.     LEA    TrackdiskIOExtTD,A1
  6883.     CLR.L    IO_OFFSET(A1)
  6884.     MOVE.L    #512,IO_LENGTH(A1)
  6885.     MOVE    #CMD_WRITE,IO_COMMAND(A1)
  6886.     MOVE.L    4.W,A6
  6887.     JSR    LVODoIO(A6)    ; Write bootblock
  6888.     MOVE.L    #DateStamp,D1
  6889.     MOVE.L    DOSBase,A6
  6890.     JSR    LVODateStamp(A6)
  6891.     MOVE.L    4.W,A6
  6892.     BSR    ClearCylinder
  6893.     MOVE.L    FormatDataPtr,A2
  6894.     MOVE    #2,2(A2)
  6895.     MOVE    #$0048,14(A2)
  6896.     MOVE.L    #$FFFFFFFF,$0138(A2)
  6897.     MOVE    #$0371,$013E(A2)
  6898.     MOVE.L    #$0553542D,$01B0(A2)
  6899.     MOVE    DiskNumText1,$01B4(A2)
  6900.     MOVE    #$06F7,$01E2(A2)
  6901.     MOVE    #1,$01FE(A2)
  6902.     LEA    DateStamp,A0
  6903.     MOVE.L    (A0),D0
  6904.     MOVE.L    D0,$01A4(A2)
  6905.     MOVE.L    D0,$01E4(A2)
  6906.     MOVE.L    4(A0),D0
  6907.     MOVE.L    D0,$01A8(A2)
  6908.     MOVE.L    D0,$01E8(A2)
  6909.     MOVE.L    8(A0),D0
  6910.     MOVE.L    D0,$01AC(A2)
  6911.     MOVE.L    D0,$01EC(A2)
  6912.     MOVE.L    A2,A3
  6913.     MOVE.L    A3,A4
  6914.     MOVEQ    #$7F,D1
  6915.     MOVEQ    #0,D0
  6916.     MOVE.L    D0,$0014(A4)
  6917. df_loop2
  6918.     SUB.L    (A3)+,D0
  6919.     DBF    D1,df_loop2
  6920.     MOVE.L    D0,$0014(A4)
  6921.     MOVE.L    #$C000C037,$0200(A2)
  6922.     LEA    $0204(A2),A3
  6923.     MOVEQ    #$36,D0
  6924. df_loop3
  6925.     MOVE.L    #$FFFFFFFF,(A3)+
  6926.     DBF    D0,df_loop3
  6927.     MOVE    #$3FFF,$0272(A2)
  6928.     MOVE    #$3FFF,$02DC(A2)
  6929.     LEA    TrackdiskIOExtTD,A1
  6930.     MOVE.L    #$0006E000,IO_OFFSET(A1)
  6931.     MOVE.L    #1024,IO_LENGTH(A1)
  6932.     MOVE    #CMD_WRITE,IO_COMMAND(A1)
  6933.     JSR    LVODoIO(A6)
  6934.     LEA    TrackdiskIOExtTD,A1
  6935.     MOVE    #CMD_UPDATE,IO_COMMAND(A1)
  6936.     JSR    LVODoIO(A6)    ; Flush write buffer
  6937. df_cleanup
  6938.     LEA    TrackdiskIOExtTD,A1
  6939.     MOVE    #TD_MOTOR,IO_COMMAND(A1)
  6940.     CLR.L    IO_LENGTH(A1)
  6941.     JSR    LVODoIO(A6)    ; Turn off the motor
  6942.     MOVE.L    Fmt_tja,A0
  6943.     MOVE.L    $0024(A0),A0
  6944.     OR.B    #2,$0040(A0)
  6945.     LEA    TrackdiskIOExtTD,A1
  6946.     MOVE.L    4.W,A6
  6947.     JSR    LVOCloseDevice(A6)
  6948.     LEA    TrackdiskPort,A1
  6949.     JSR    LVORemPort(A6)
  6950.     MOVE.L    FormatDataPtr,A1
  6951.     MOVE.L    #5632,D0
  6952.     JSR    LVOFreeMem(A6)
  6953.     CMP    #160,CylinderNumber
  6954.     BNE.S    df_skip2
  6955.     CMP    #'00',DiskNumText1
  6956.     BNE.S    df_skip2
  6957.  
  6958.     MOVE.L    DOSBase,A6
  6959.     MOVE.L    #150,D1    ; Wait 3 sec
  6960.     JSR    LVODelay(A6)
  6961.  
  6962.     MOVE.L    #LockNameDF0,D1
  6963.     MOVE.L    #-2,D2
  6964.     JSR    LVOLock(A6)
  6965.     MOVE.L    D0,D6
  6966.     BEQ    df_skip3
  6967.     MOVE.L    D0,D1
  6968.     JSR    LVOCurrentDir(A6)
  6969.     MOVE.L    D0,D7
  6970.     MOVE.L    D6,D1
  6971.     JSR    LVOUnLock(A6)
  6972.  
  6973.     MOVE.L    #FmtSongDirName,D1
  6974.     JSR    LVOCreateDir(A6)
  6975.     MOVE.L    D0,D1
  6976.     BEQ.S    .err1
  6977.     JSR    LVOUnLock(A6)
  6978. .err1    MOVE.L    #FmtModuleDirName,D1
  6979.     JSR    LVOCreateDir(A6)
  6980.     MOVE.L    D0,D1
  6981.     BEQ.S    df_skip2
  6982.     JSR    LVOUnLock(A6)
  6983. df_skip2
  6984.     MOVE.L    D7,D1
  6985.     JSR    LVOCurrentDir(A6)
  6986. df_skip3
  6987.     BSR    SetNormalPtrCol
  6988.     BSR    ShowAllRight
  6989.     BSR    ClearFileNames
  6990.     MOVE    #1,UpdateFreeMem
  6991.     RTS
  6992.  
  6993. df_memerr
  6994.     BSR    OutOfMemErr
  6995.     BRA.S    df_skip2
  6996.  
  6997. ClearCylinder
  6998.     MOVE.L    FormatDataPtr,A0
  6999.     MOVE    #1407,D0
  7000.     MOVEQ    #0,D1
  7001. ccloop    MOVE.L    D1,(A0)+
  7002.     DBF    D0,ccloop
  7003.     RTS
  7004.  
  7005. BootblockData
  7006.     dc.l    $444F5300,$c0200f19,$00000370,$43fa0018
  7007.     dc.l    $4eaeffa0,$4a80670a,$20402068,$00167000
  7008.     dc.l    $4e7570ff,$60fa646f,$732e6c69,$62726172
  7009.     dc.l    $79000000
  7010.  
  7011. LockNameDF0    dc.b    "df0:",0
  7012.     even
  7013.  
  7014.  
  7015. ;---- Clear All Data ----
  7016.  
  7017. ClearAll
  7018.     ADD.L    #1,LaHeTx
  7019.     MOVE.B    DisableAnalyzer,SaveDA
  7020.     MOVE.B    ScopeEnable,SaveScope
  7021.     SF    ScopeEnable
  7022.     LEA    PleaseSelectText,A0
  7023.     BSR    ShowStatusText
  7024.     BSR    StorePtrCol
  7025.     BSR    SetWaitPtrCol
  7026.     JSR    Wait_4000
  7027.     CMP    #1,CurrScreen
  7028.     BNE.S    clbskip
  7029.     TST.B    DisableAnalyzer
  7030.     BNE.S    clbskip
  7031.     ST     DisableAnalyzer
  7032.     BSR    ClearAnaHeights
  7033.     BSR    ClearRightArea
  7034. clbskip    LEA    ClearBoxData,A1
  7035.     BSR    SwapBoxMem
  7036.     BSR    WaitForButtonUp
  7037.     JSR    Wait_4000
  7038. clearbuttoncheck
  7039.     BTST    #2,$DFF016
  7040.     BEQ    ClrCancel
  7041.     BSR    DoKeyBuffer
  7042.     MOVE.B    RawKeyCode,D0
  7043.     CMP.B    #33,D0 ; Pressed S
  7044.     BEQ    ClrSamples
  7045.     CMP.B    #24,D0 ; Pressed O
  7046.     BEQ    ClrSong
  7047.     CMP.B    #32,D0 ; Pressed A
  7048.     BEQ    ClrAll
  7049.     CMP.B    #51,D0 ; Pressed C
  7050.     BEQ    ClrCancel
  7051.     CMP.B    #69,D0 ; Pressed Esc
  7052.     BEQ    ClrCancel
  7053.     BTST    #6,$BFE001    ; Left Mousebutton
  7054.     BNE.S    clearbuttoncheck
  7055.     MOVEM.W    MouseX,D0/D1
  7056.     CMP    #166,D0
  7057.     BLO.S    clearbuttoncheck
  7058.     CMP    #257,D0
  7059.     BHI.S    clearbuttoncheck
  7060.     CMP    #58,D1
  7061.     BLO.S    clearbuttoncheck
  7062.     CMP    #84,D1
  7063.     BHI.S    clearbuttoncheck
  7064.     CMP    #204,D0
  7065.     BHS.S    samporcancel
  7066.     CMP    #198,D0
  7067.     BLS.S    songorall
  7068.     BRA.S    clearbuttoncheck
  7069.  
  7070. songorall
  7071.     CMP    #74,D1
  7072.     BHS.S    ClrAll
  7073.     CMP    #68,D1
  7074.     BLS    ClrSong
  7075.     BRA    clearbuttoncheck
  7076.  
  7077. samporcancel
  7078.     CMP    #74,D1
  7079.     BHS.S    ClrCancel
  7080.     CMP    #68,D1
  7081.     BLS.S    ClrSamples
  7082.     BRA    clearbuttoncheck
  7083.  
  7084. RemoveClearBox
  7085.     LEA    ClearBoxData,A1
  7086.     BSR    SwapBoxMem
  7087.     BSR    ShowAllRight
  7088.     BSR    ClearAnaHeights
  7089.     MOVE.B    SaveDA,DisableAnalyzer
  7090.     MOVE.B    SaveScope,ScopeEnable
  7091.     BSR    RestorePtrCol
  7092.     CLR.B    RawKeyCode
  7093.     RTS
  7094.  
  7095. ClrCancel
  7096.     BSR.S    RemoveClearBox
  7097.     BRA    SetErrorPtrCol
  7098.  
  7099. ClrAll    BSR    DoClearSong
  7100.     BSR    ClrSampleInfo
  7101.     BSR    SetNormalPtrCol
  7102.     BSR.S    RemoveClearBox
  7103.     BRA    DisplayMainAll
  7104.  
  7105. ClrSamples
  7106.     BSR.S    RemoveClearBox
  7107.     BSR    StopIt
  7108.     BSR    ClrSampleInfo
  7109.     BSR    SetNormalPtrCol
  7110.     SF    EdEnable
  7111.     MOVE    #1,InsNum
  7112.     BRA    DisplayMainAll
  7113.  
  7114. ClrSong    BSR.S    RemoveClearBox
  7115.     BSR    DoClearSong
  7116.     BSR    SetNormalPtrCol
  7117.     BRA    DisplayMainAll
  7118.  
  7119. ClrSampleInfo
  7120.     BSR    GiveBackInstrMem
  7121.     MOVE.L    SongDataPtr,A0
  7122.     LEA    sd_sampleinfo(A0),A0
  7123.     MOVE    #31*30-1,D0
  7124. csiloop    CLR.B    (A0)+
  7125.     DBF    D0,csiloop
  7126.     MOVE.L    SongDataPtr,A1
  7127.     LEA    sd_sampleinfo(A1),A1
  7128.     MOVEQ    #30,D0
  7129. caloop2    MOVE    #1,28(A1)
  7130.     LEA    30(A1),A1
  7131.     DBF    D0,caloop2
  7132.     LEA    SampleLengthAdd(PC),A3
  7133.     MOVEQ    #31,D0
  7134. csilop2    CLR    (A3)+
  7135.     DBF    D0,csilop2
  7136.     JMP    RedrawSample
  7137.  
  7138. DoClearSong
  7139.     BSR    StopIt
  7140.     CLR.B    RawKeyCode
  7141.     MOVE.L    SongDataPtr,A0
  7142.     MOVE.L    A0,A1
  7143.     MOVEQ    #19,D0
  7144. docla2x    CLR.B    (A0)+
  7145.     DBF    D0,docla2x
  7146.     MOVE.L    A1,A2
  7147.     ADD.L    #70716,A2
  7148.     ADD.L    #950,A1
  7149.     MOVEQ    #0,D0
  7150. caloop    MOVE    D0,(A1)+
  7151.     CMP.L    A1,A2
  7152.     BNE.S    caloop
  7153.     MOVE.L    SongDataPtr,A0
  7154.     MOVE    #$017F,sd_numofpatt(A0)
  7155.     MOVE.L    #'M.K.',sd_mahokakt(A0)  ; M.K. all the way...
  7156.     SF    EdEnable
  7157.     CLR.L    CurrPos
  7158.     CLR.L    SongPosition
  7159.     CLR.L    PatternPosition
  7160.     CLR.L    PatternPtr
  7161.     CLR.L    TimerTicks
  7162.     CLR    BlockMarkFlag
  7163.     CLR.B    MetroChannel
  7164.     MOVE    #1,EditMoveAdd
  7165.     MOVEQ    #0,D0
  7166.     MOVE    DefaultSpeed,D0
  7167.     MOVE.L    D0,CurrSpeed
  7168.     MOVE    Tempo,RealTempo
  7169.     BSR    SetTempo
  7170.     BSR    RestoreEffects2
  7171.     BSR    RestoreFKeyPos2
  7172.     BSR    UnmuteAll
  7173.     MOVE    #1,InsNum
  7174.     MOVE.L    #6,CurrSpeed
  7175.     CLR.L    PatternNumber
  7176.     CLR    ScrPattPos
  7177.     BSR    SetScrPatternPos
  7178.     BRA    RedrawPattern
  7179.  
  7180. UnmuteAll
  7181.     MOVE    #1,audchan1toggle
  7182.     MOVE    #1,audchan2toggle
  7183.     MOVE    #1,audchan3toggle
  7184.     MOVE    #1,audchan4toggle
  7185.     MOVE    #$000F,ActiveChannels
  7186.     BRA    RedrawToggles
  7187.  
  7188. ToggleMute
  7189.     CLR.B    RawKeyCode
  7190.     TST    ShiftKeyStatus
  7191.     BEQ    tomuskp
  7192.     CLR    audchan1toggle
  7193.     CLR    audchan2toggle
  7194.     CLR    audchan3toggle
  7195.     CLR    audchan4toggle
  7196. tomuskp    MOVEQ    #0,D0
  7197.     MOVE    PattCurPos,D0
  7198.     DIVU    #6,D0
  7199.     MULU    #11,D0
  7200.     ADDQ    #4,D0
  7201.     BRA    DoToggleMute
  7202.  
  7203. RestoreEffects
  7204.     MOVEQ    #0,D0
  7205.     MOVE    DefaultSpeed,D0
  7206.     MOVE.L    D0,CurrSpeed
  7207.     MOVE    Tempo,RealTempo
  7208.     BSR    SetTempo
  7209.     BSR.S    RestoreEffects2
  7210.     CLR.B    RawKeyCode
  7211.     LEA    EfxRestoredText(PC),A0
  7212.     BSR    ShowStatusText
  7213.     BSR    WaitALittle
  7214.     BRA    ShowAllRight
  7215.  
  7216. RestoreEffects2
  7217.     LEA    audchan1temp,A0
  7218.     BSR.S    reefsub
  7219.     LEA    audchan2temp,A0
  7220.     BSR.S    reefsub
  7221.     LEA    audchan3temp,A0
  7222.     BSR.S    reefsub
  7223.     LEA    audchan4temp,A0
  7224. reefsub    CLR.B    n_wavecontrol(A0)
  7225.     CLR.B    n_glissfunk(A0)
  7226.     CLR.B    n_finetune(A0)
  7227.     CLR.B    n_loopcount(A0)
  7228.     RTS
  7229.  
  7230. RestoreFKeyPos
  7231.     CLR.B    RawKeyCode
  7232.     LEA    PosRestoredText(PC),A0
  7233.     BSR    ShowStatusText
  7234.     BSR    WaitALittle
  7235.     BSR    ShowAllRight
  7236. RestoreFKeyPos2
  7237.     MOVE    #00,F6pos
  7238.     MOVE    #16,F7pos
  7239.     MOVE    #32,F8pos
  7240.     MOVE    #48,F9pos
  7241.     MOVE    #63,F10pos
  7242.     RTS
  7243.  
  7244. EfxRestoredText    dc.b 'efx restored !',0
  7245. PosRestoredText    dc.b 'pos restored !',0
  7246.  
  7247.  
  7248. GiveBackInstrMem
  7249.     MOVEQ    #1,D7
  7250.     MOVE.L    4.W,A6
  7251. gbimloop
  7252.     MOVE    D7,D2
  7253.     LSL    #2,D2
  7254.     LEA    SamplePtrs,A0
  7255.     MOVE.L    0(A0,D2.W),D1
  7256.     BEQ.S    gbimskip
  7257.     MOVE.L    124(A0,D2.W),D0
  7258.     CLR.L    0(A0,D2.W)
  7259.     CLR.L    124(A0,D2.W)
  7260.     MOVE.L    D1,A1
  7261.     JSR    LVOFreeMem(A6)
  7262. gbimskip
  7263.     ADDQ    #1,D7
  7264.     CMP    #32,D7
  7265.     BNE.S    gbimloop
  7266.     MOVE    #1,UpdateFreeMem
  7267.     JMP    FreeCopyBuf
  7268.  
  7269. ;---- Setup ---- +++
  7270.  
  7271. Setup    CMP    #7,LastSetupScreen
  7272.     BEQ    Setup2
  7273.     CLR    LastSetupScreen
  7274.     BSR    WaitForButtonUp
  7275.     MOVE    #5,CurrScreen
  7276.     ST    DisableAnalyzer
  7277.     ST    NoSampleInfo
  7278.     BSR    Clear100Lines
  7279.     BSR    ShowSetupScreen
  7280.     BEQ    ExitSetup
  7281. RefreshSetup
  7282.     BSR    SetScreenColors
  7283.     BSR    Show_MS
  7284.     CMP    #5,CurrScreen
  7285.     BNE    Return1
  7286.     BSR    MarkColor
  7287.     BSR    ShowSetupToggles
  7288.     BSR    ShowSplit
  7289.     BSR    ShowPrintPath
  7290.     BSR    ShowKeyRepeat
  7291.     BSR    ShowExtCommand
  7292.     BSR    ShowMultiSetup
  7293.     BSR    ShowConfigNumber
  7294.     BSR    ShowAccidental ; Always last (redraws pattern) 
  7295.     RTS
  7296.  
  7297.  
  7298. ShowSetupScreen
  7299.     MOVE.L    SetupMemPtr,D0
  7300.     BNE    DecompactSetup
  7301.     BSR    SaveMainPic
  7302.     TST.L    SetupMemPtr
  7303.     BEQ    Return1
  7304.     BRA    DecompactSetup
  7305.  
  7306. SaveMainPic
  7307.     MOVE.L    #8000,D0
  7308.     MOVEQ    #0,D1
  7309.     MOVE.L    4.W,A6
  7310.     JSR    LVOAllocMem(A6)
  7311.     MOVE.L    D0,SetupMemPtr
  7312.     BEQ    OutOfMemErr
  7313.     MOVE.L    D0,A1
  7314.     LEA    BitPlaneData,A0
  7315.     MOVEQ    #1,D2
  7316. sssloop1
  7317.     MOVE    #999,D0
  7318. sssloop2
  7319.     MOVE.L    (A0)+,(A1)+
  7320.     DBF    D0,sssloop2
  7321.     LEA    6240(A0),A0
  7322.     DBF    D2,sssloop1
  7323.     RTS
  7324.  
  7325. RestoreMainPic
  7326.     MOVE.L    SetupMemPtr,D0
  7327.     BEQ    Return1
  7328.     MOVE.L    D0,A1
  7329.     LEA    BitPlaneData,A0
  7330.     MOVEQ    #1,D2
  7331. ssxloop1
  7332.     MOVE    #1000-1,D0
  7333. ssxloop2
  7334.     MOVE.L    (A1)+,(A0)+
  7335.     DBF    D0,ssxloop2
  7336.     LEA    6240(A0),A0
  7337.     DBF    D2,ssxloop1
  7338.     MOVE.L    SetupMemPtr,A1
  7339.     CLR.L    SetupMemPtr
  7340.     MOVE.L    #8000,D0
  7341.     MOVE.L    4.W,A6
  7342.     JSR    LVOFreeMem(A6)
  7343.     RTS
  7344.  
  7345. SetupMemPtr    dc.l 0
  7346.  
  7347. DecompactSetup2
  7348.     LEA    Setup2Data,A0
  7349.     BRA.S    decoset
  7350.  
  7351. DecompactSetup
  7352.     LEA    SetupScreenData,A0
  7353. decoset    BSR    Decompact
  7354.     BEQ    Return1
  7355.     BSR    ssets3
  7356.     MOVEQ    #-1,D0
  7357.     RTS
  7358.  
  7359.  
  7360.  
  7361. ; Gadgets
  7362.  
  7363. CheckSetupGadgs
  7364.     TST.L    SplitAddress
  7365.     BEQ.S    csgskip
  7366.     CLR.L    SplitAddress
  7367.     BSR    ShowSplit
  7368. csgskip    MOVEM.W    MouseX2,D0/D1
  7369.     CMP    #210,D0
  7370.     BHS    SetupMenu3
  7371.     CMP    #108,D0
  7372.     BHS.S    SetupMenu2
  7373. ;---- Menu 1 ----
  7374.     CMP    #11,D1
  7375.     BLS    LoadConfig
  7376.     CMP    #22,D1
  7377.     BLS    SaveConfig
  7378.     CMP    #33,D1
  7379.     BLS    ResetAll
  7380.     CMP    #44,D1
  7381.     BLS    ExtCommand
  7382.     CMP    #55,D1
  7383.     BLS    MultiSetup
  7384.     CMP    #66,D1
  7385.     BLS    SetRed
  7386.     CMP    #77,D1
  7387.     BLS    SetGreen
  7388.     CMP    #88,D1
  7389.     BLS    SetBlue
  7390.     CMP    #99,D1
  7391.     BLS    ColorGadgets
  7392.     RTS
  7393.  
  7394. SetupMenu2
  7395.     CMP    #11,D1
  7396.     BLS    Return1
  7397.     CMP    #55,D1
  7398.     BLS    SetSplit
  7399.     CMP    #66,D1
  7400.     BLS    SetKeyRepeat
  7401.     CMP    #77,D1
  7402.     BLS    ToggleAccidental
  7403.     CMP    #88,D1
  7404.     BLS    PrintSong
  7405.     CMP    #99,D1
  7406.     BLS    EnterPrintPath
  7407.     RTS
  7408.  
  7409. SetupMenu3
  7410.     CMP    #11,D1
  7411.     BLS.S    ExitOrClear
  7412.     CMP    #22,D1
  7413.     BLS    ToggleSplit
  7414.     CMP    #33,D1
  7415.     BLS    ToggleFilter
  7416.     CMP    #44,D1
  7417.     BLS    ToggleTransDel
  7418.     CMP    #55,D1
  7419.     BLS    ToggleShowDec
  7420.     CMP    #66,D1
  7421.     BLS    ToggleAutoDir
  7422.     CMP    #77,D1
  7423.     BLS    ToggleAutoExit
  7424.     CMP    #88,D1
  7425.     BLS    ToggleModOnly
  7426.     CMP    #99,D1
  7427.     BLS    ToggleMIDI
  7428.     RTS
  7429.  
  7430. ExitOrClear
  7431.     CMP    #265,D0
  7432.     BLS    ClearSplit
  7433.     CMP    #306,D0
  7434.     BHS    Setup2
  7435. ExitSetup
  7436.     BSR    WaitForButtonUp
  7437.     MOVE    CurrScreen,LastSetupScreen
  7438.     CLR.B    RawKeyCode
  7439.     CLR.L    SplitAddress
  7440.     BSR    RestoreMainPic
  7441.     SF    NoSampleInfo
  7442.     BSR    SetupVUCols
  7443.     BSR    SetupAnaCols
  7444.     BSR    Clear100Lines
  7445.     BRA    DisplayMainAll
  7446.  
  7447. LastSetupScreen    dc.w 0
  7448.  
  7449. ToggleSplit
  7450.     EOR.B    #1,SplitFlag
  7451.     BRA    ShowSetupToggles
  7452.  
  7453. ToggleFilter
  7454.     BCHG    #1,$BFE001
  7455.     BRA    ShowSetupToggles
  7456.  
  7457. ToggleTransDel
  7458.     EOR.B    #1,TransDelFlag
  7459.     BRA.S    ShowSetupToggles
  7460.  
  7461. ToggleShowDec
  7462.     EOR.B    #1,ShowDecFlag
  7463.     MOVE    #1,UpdateFreeMem
  7464.     BRA.S    ShowSetupToggles
  7465.  
  7466. ToggleAutoDir
  7467.     EOR.B    #1,AutoDirFlag
  7468.     BRA.S    ShowSetupToggles
  7469.  
  7470. ToggleAutoExit
  7471.     EOR.B    #1,AutoExitFlag
  7472.     BRA.S    ShowSetupToggles
  7473.  
  7474. ToggleModOnly
  7475.     EOR.B    #1,ModOnlyFlag
  7476.     LEA    FileNamesPtr(PC),A0
  7477.     CLR.L    4(A0)
  7478.     BRA.S    ShowSetupToggles
  7479.  
  7480. ToggleMIDI
  7481.     EOR.B    #1,MIDIFlag
  7482.     BSR.S    ShowSetupToggles
  7483. tstmidi    TST.B    MIDIFlag
  7484.     BNE    OpenMIDI
  7485.     BRA    CloseMIDI
  7486.  
  7487. ClearSplit
  7488.     BSR    WaitForButtonUp
  7489.     LEA    ClearSplitText,A0
  7490.     BSR    AreYouSure
  7491.     BNE    Return1
  7492.     LEA    SplitData,A0
  7493.     MOVEQ    #15,D0
  7494. clsploop
  7495.     CLR.B    (A0)+
  7496.     DBF    D0,clsploop
  7497.     BRA    ShowSplit
  7498.  
  7499. ShowSetupToggles
  7500.     CLR.B    RawKeyCode
  7501.     BSR    Show_MS
  7502.     CMP    #5,CurrScreen
  7503.     BNE    Return1
  7504.     MOVE.B    $BFE001,D0
  7505.     LSR.B    #1,D0
  7506.     AND.B    #1,D0
  7507.     EOR.B    #1,D0
  7508.     MOVE.B    D0,FilterFlag
  7509.     LEA    SplitFlag,A4
  7510.     MOVE    #3,TextLength
  7511.     MOVEQ    #7,D7
  7512.     MOVE    #636,D6
  7513. sstloop
  7514.     MOVE    D6,TextOffset
  7515.     LEA    ToggleOFFText(PC),A0
  7516.     TST.B    (A4)+
  7517.     BEQ.S    sstskip
  7518.     LEA    ToggleONText(PC),A0
  7519. sstskip
  7520.     BSR    ShowText2
  7521.     ADD    #440,D6
  7522.     DBF    D7,sstloop
  7523.     BRA    WaitForButtonUp
  7524.  
  7525. ToggleONText2    dc.b ' '
  7526. ToggleONText    dc.b 'on '
  7527. ToggleOFFText    dc.b 'off '
  7528.  
  7529. ShowSplit
  7530.     BSR    CalculateSplit
  7531.     CMP    #5,CurrScreen
  7532.     BNE    Return1
  7533.     LEA    SplitData,A3
  7534.     MOVE.L    NoteNamesPtr,A4
  7535.     MOVEQ    #0,D5
  7536.     MOVE    #614,D6
  7537.     CLR    WordNumber
  7538. shsploop
  7539.     MOVE    D6,TextOffset
  7540.     MOVE.B    (A3,D5.W),WordNumber+1 ; instr
  7541.     BSR    PrintHexByte
  7542.     ADDQ    #4,D6
  7543.     MOVE    D6,D1
  7544.     MOVEQ    #0,D0
  7545.     MOVE.B    1(A3,D5.W),D0 ; note
  7546.     LSL    #2,D0
  7547.     LEA    (A4,D0.W),A0
  7548.     MOVEQ    #4,D0
  7549.     BSR    ShowText3
  7550.     ADDQ.L    #5,D6
  7551.     MOVE    D6,D1
  7552.     MOVEQ    #0,D0
  7553.     MOVE.B    2(A3,D5.W),D0 ; trans
  7554.     LSL    #2,D0
  7555.     LEA    (A4,D0.W),A0
  7556.     MOVEQ    #4,D0
  7557.     BSR    ShowText3
  7558.     ADD    #431,D6
  7559.     ADDQ    #4,D5
  7560.     CMP    #16,D5
  7561.     BNE.S    shsploop
  7562.     RTS
  7563.  
  7564. CalculateSplit
  7565.     LEA    SplitTransTable,A0
  7566.     LEA    SplitInstrTable,A1
  7567.     LEA    SplitData,A2
  7568.     MOVEQ    #0,D0
  7569. casploop
  7570.     MOVE.B    D0,(A0,D0.W)
  7571.     CLR.B    (A1,D0.W)
  7572.     ADDQ    #1,D0
  7573.     CMP    #37,D0
  7574.     BLS.S    casploop
  7575.  
  7576.     MOVE.B    1(A2),-(SP)
  7577.     MOVE.B    1+4(A2),-(SP)
  7578.     MOVE.B    1+8(A2),-(SP)
  7579.     MOVE.B    1+12(A2),-(SP) ; note
  7580.  
  7581.     MOVEQ    #3,D4
  7582. caspbigloop
  7583.     MOVEQ    #127,D0
  7584.     MOVEQ    #0,D1
  7585.     MOVEQ    #0,D2
  7586. casploop2
  7587.     CMP.B    1(A2,D1.W),D0 ; note
  7588.     BLS.S    caspskip
  7589.     MOVE.L    D1,D2
  7590.     MOVE.B    1(A2,D1.W),D0 ; note
  7591. caspskip
  7592.     ADDQ    #4,D1
  7593.     CMP    #16,D1
  7594.     BNE.S    casploop2
  7595.  
  7596.     MOVEQ    #0,D0
  7597.     MOVE.B    1(A2,D2.W),D0 ; note
  7598.     MOVE.B    #127,1(A2,D2.W) ; note
  7599.     MOVE.B    2(A2,D2.W),D1 ; trans
  7600. casploop3
  7601.     MOVE.B    D1,(A0,D0.W)
  7602.     MOVE.B    (A2,D2.W),(A1,D0.W) ; instr
  7603.     ADDQ    #1,D1
  7604.     CMP    #36,D1
  7605.     BLO.S    caspskip2
  7606.     MOVEQ    #35,D1
  7607. caspskip2
  7608.     ADDQ    #1,D0
  7609.     CMP    #36,D0
  7610.     BLO.S    casploop3
  7611.     DBF    D4,caspbigloop
  7612.  
  7613.     MOVE.B    (SP)+,1+12(A2)
  7614.     MOVE.B    (SP)+,1+8(A2)
  7615.     MOVE.B    (SP)+,1+4(A2)
  7616.     MOVE.B    (SP)+,1(A2) ; note
  7617.     RTS
  7618.  
  7619. SetSplit
  7620.     LEA    SplitData,A2
  7621.     SUBQ    #1,D1
  7622.     DIVU    #11,D1
  7623.     SUBQ    #1,D1
  7624.     MOVE    D1,D7
  7625.     LSL    #2,D7
  7626.     MULU    #440,D1
  7627.     ADD    #600,D1
  7628.     CMP    #176,D0
  7629.     BHS.S    SetSplitTranspose
  7630.     CMP    #136,D0
  7631.     BHS.S    SetSplitNote
  7632.     ADD    #14,D1
  7633.     MOVE    D1,TextOffset
  7634.     BSR    GetHexByte
  7635.     CMP.B    #$1F,D0
  7636.     BLS.S    setskip
  7637.     MOVE.B    #$1F,D0
  7638. setskip    MOVE.B    D0,(A2,D7.W) ; instr
  7639.     BRA    ShowSplit
  7640.  
  7641. SetSplitNote
  7642.     MOVE.L    D1,-(SP)
  7643.     BSR    ShowSplit
  7644.     MOVE.L    (SP)+,D1
  7645.     ADD    #18,D1
  7646.     MOVEQ    #3,D0
  7647.     LEA    SpcNoteText,A0
  7648.     BSR    ShowText3
  7649.     LEA    1(A2,D7.W),A0 ; note
  7650.     MOVE.L    A0,SplitAddress
  7651.     BRA    WaitForButtonUp
  7652.  
  7653. SetSplitTranspose
  7654.     MOVE.L    D1,-(SP)
  7655.     BSR    ShowSplit
  7656.     MOVE.L    (SP)+,D1
  7657.     ADD    #23,D1
  7658.     MOVEQ    #3,D0
  7659.     LEA    SpcNoteText,A0
  7660.     BSR    ShowText3
  7661.     LEA    2(A2,D7.W),A0 ; trans
  7662.     MOVE.L    A0,SplitAddress
  7663.     BRA    WaitForButtonUp
  7664.  
  7665. SetKeyRepeat
  7666.     CMP    #188,D0
  7667.     BHS.S    skrep2
  7668.     MOVE    #2381,TextOffset
  7669.     BSR    GetHexByte
  7670.     MOVE.B    D0,KeyRepDelay+1
  7671.     BRA.S    ShowKeyRepeat
  7672. skrep2    MOVE    #2384,TextOffset
  7673.     BSR    GetHexByte
  7674.     MOVE.B    D0,KeyRepSpeed+1
  7675. ShowKeyRepeat
  7676.     MOVE    #2381,TextOffset
  7677.     MOVE    KeyRepDelay,WordNumber
  7678.     BSR    PrintHexByte
  7679.     ADDQ    #1,TextOffset
  7680.     MOVE    KeyRepSpeed,WordNumber
  7681.     BRA    PrintHexByte
  7682.  
  7683. ToggleAccidental
  7684.     MOVE.L    #NoteNames1,NoteNamesPtr
  7685.     EOR.B    #1,Accidental
  7686.     BEQ.S    ShowAccidental
  7687.     MOVE.L    #NoteNames2,NoteNamesPtr
  7688. ShowAccidental
  7689.     LEA    AccidentalText(PC),A0
  7690.     TST.B    Accidental
  7691.     BEQ.S    shacskp
  7692.     LEA    AccidentalText+1(PC),A0
  7693. shacskp    MOVEQ    #1,D0
  7694.     MOVE    #2824,D1
  7695.     BSR    ShowText3
  7696.     BRA    RedrawPattern
  7697.  
  7698. AccidentalText    dc.b '#¡'
  7699.  
  7700. LoadConfig
  7701.     CMP    #84,D0
  7702.     BHS    SetConfigNumber
  7703.     LEA    LoadConfigText,A0
  7704.     BSR    AreYouSure
  7705.     BNE    Return1
  7706.     BSR    WaitForButtonUp
  7707.     LEA    LoadingCfgText(PC),A0
  7708.     BSR    ShowStatusText
  7709. DoLoadConfig
  7710.     BSR    StorePtrCol
  7711.     BSR    PutConfigNumber
  7712.     MOVE.L    #ConfigName,D1
  7713.     MOVE.L    #1005,D2
  7714.     MOVE.L    DOSBase,A6
  7715.     JSR    LVOOpen(A6)
  7716.     MOVE.L    D0,D7
  7717.     BNE.S    cfgopok
  7718.     LEA    PTPath,A0
  7719.     BSR    CopyPath
  7720.     LEA    ConfigName(PC),A0
  7721.     MOVEQ    #12,D0
  7722. cfgnlop    MOVE.B    (A0)+,(A1)+
  7723.     DBF    D0,cfgnlop
  7724.     MOVE.L    #FileName,D1
  7725.     MOVE.L    #1005,D2
  7726.     MOVE.L    DOSBase,A6
  7727.     JSR    LVOOpen(A6)
  7728.     MOVE.L    D0,D7
  7729.     BEQ.S    ConfigErr
  7730. cfgopok    BSR    SetDiskPtrCol
  7731.     MOVE.L    D7,D1
  7732.     CLR.L    ConfigID
  7733.     MOVE.L    #ConfigID,D2
  7734.     MOVE.L    #4,D3
  7735.     JSR    LVORead(A6)
  7736.     CMP.L    #"PT1.",ConfigID
  7737.     BEQ.S    .okcon
  7738.     CMP.L    #"PT2.",ConfigID
  7739.     BEQ.S    .okcon
  7740.         BRA    cfgerr2        ;not config file
  7741.  
  7742. .okcon    LEA    SetupData+4,A0
  7743.     MOVE.L    D7,D1
  7744.     MOVE.L    A0,D2
  7745.     MOVE.L    #ConfigFileSize-4,D3
  7746.     JSR    LVORead(A6)
  7747. lcfgend    MOVE.L    D7,D1
  7748.     JSR    LVOClose(A6)
  7749.     BSR    ShowAllRight
  7750.     BSR    RestorePtrCol
  7751. cfgupda    BSR    CopyCfgData
  7752.     BSR    tstmidi
  7753.     BSR    ChangeCopList
  7754.     BRA    RefreshSetup
  7755.  
  7756. ConfigErr
  7757.     BSET    #2,InitError
  7758.     LEA    FileNotFoundText(PC),A0
  7759. cferr    BSR    ShowStatusText
  7760.     MOVE    #50,WaitTime
  7761.     BRA    ErrorRestoreCol
  7762.  
  7763. cfgerr2    BSR.S    ConfigErr2
  7764.     BRA.S    lcfgend
  7765.  
  7766. ConfigErr2
  7767.     BSET    #3,InitError
  7768.     LEA    NotAConfFileText(PC),A0
  7769.     BRA.S    cferr
  7770.  
  7771. ConfigErr3
  7772.     LEA    CantCreateFiText(PC),A0
  7773.     BRA.S    cferr
  7774.  
  7775. FileNotFoundText dc.b "config not found!",0
  7776. NotAConfFileText dc.b "not a config file",0
  7777. CantCreateFiText dc.b "can't create file",0
  7778.  
  7779. SaveConfig
  7780.     CMP    #84,D0
  7781.     BHS    SetConfigNumber
  7782.     LEA    SaveConfigText,A0
  7783.     BSR    AreYouSure
  7784.     BNE    Return1
  7785.     BSR    StorePtrCol
  7786.     BSR    SetDiskPtrCol
  7787.     BSR    PutConfigNumber
  7788.     LEA    SavingCfgText(PC),A0
  7789.     BSR    ShowStatusText
  7790.     MOVE.L    DOSBase,A6
  7791.     LEA    PTPath,A0
  7792.     BSR    CopyPath
  7793.     LEA    ConfigName(PC),A0
  7794.     MOVEQ    #12,D0
  7795. cfgllop    MOVE.B    (A0)+,(A1)+
  7796.     DBF    D0,cfgllop
  7797.     MOVE.L    #FileName,D1
  7798.     MOVE.L    #1006,D2
  7799.     JSR    LVOOpen(A6)
  7800.     MOVE.L    D0,D7
  7801.     BEQ    ConfigErr3
  7802.     MOVE.L    D0,D1
  7803.     MOVE.L    #SetupData,D2
  7804.     MOVE    #ConfigFileSize,D3
  7805.     JSR    LVOWrite(A6)
  7806.     MOVE.L    D7,D1
  7807.     JSR    LVOClose(A6)
  7808.     BSR    ShowAllRight
  7809.     BRA    RestorePtrCol
  7810.  
  7811. SetConfigNumber
  7812.     MOVE    #611,TextOffset
  7813.     BSR    GetHexByte
  7814.     MOVE    D0,ConfigNumber
  7815. ShowConfigNumber
  7816.     MOVE    #611,TextOffset
  7817.     MOVE    ConfigNumber(PC),WordNumber
  7818.     BRA    PrintHexByte
  7819.  
  7820. PutConfigNumber
  7821.     MOVE    ConfigNumber(PC),D0
  7822.     LEA    ConfigName+12(PC),A0
  7823.     BRA    IntToHex2
  7824.  
  7825. ConfigNum=*+10
  7826. ConfigName    dc.b 'PT.config-00',0,0
  7827. ConfigNumber    dc.w 0
  7828. LoadingCfgText    dc.b 'loading config',0
  7829. SavingCfgText    dc.b 'saving config',0,0
  7830. ConfigID    dc.l 0
  7831.  
  7832. ResetAll
  7833.     LEA    ResetAllText,A0
  7834.     BSR    AreYouSure
  7835.     BNE    Return1
  7836. DoResetAll
  7837.     LEA    DefaultSetupData,A0
  7838.     LEA    SetupData,A1
  7839.     MOVE    #ConfigFileSize-1,D0
  7840. rsaloop    MOVE.B    (A0)+,(A1)+
  7841.     DBF    D0,rsaloop
  7842.     BRA    RefreshSetup
  7843.  
  7844. ExtCommand
  7845.     CMP    #11,D0
  7846.     BLO.S    excolab
  7847.     BSR    StorePtrCol
  7848.     BSR    SetWaitPtrCol
  7849.     LEA    ExtCommands,A6
  7850.     MOVE    ExtCmdNumber,D1
  7851.     MULU    #32,D1
  7852.     ADD.L    D1,A6
  7853.     MOVE.L    A6,ShowTextPtr
  7854.     MOVE.L    A6,TextEndPtr
  7855.     ADD.L    #31,TextEndPtr
  7856.     MOVE    #11,TextLength
  7857.     MOVE    #1482,A4
  7858.     BSR    GetTextLine
  7859.     BRA    RestorePtrCol
  7860.  
  7861. ShowExtCommand
  7862.     LEA    ExtCommands,A0
  7863.     MOVE    ExtCmdNumber,D1
  7864.     MULU    #32,D1
  7865.     ADD.L    D1,A0
  7866.     MOVEQ    #11,D0
  7867.     MOVE    #1482,D1
  7868.     BRA    ShowText3
  7869.  
  7870. excolab    BTST    #2,$DFF016
  7871.     BEQ.S    excorun
  7872.     ADDQ    #1,ExtCmdNumber
  7873.     AND    #7,ExtCmdNumber
  7874.     BSR.S    ShowExtCommand
  7875.     JSR    Wait_4000
  7876.     JSR    Wait_4000
  7877.     JSR    Wait_4000
  7878.     JMP    Wait_4000
  7879.  
  7880. excorun    LEA    ExtCommands,A0
  7881.     MOVE    ExtCmdNumber,D1
  7882.     MULU    #32,D1
  7883.     ADD.L    D1,A0
  7884.     TST.B    (A0)
  7885.     BEQ    Return1
  7886.     MOVE.L    A0,ExtCmdAddress
  7887.     MOVE.L    IntuitionBase,A6
  7888.     JSR    LVOOpenWorkbench(A6)
  7889.     JSR    LVOWBenchToFront(A6)
  7890.     MOVE.L    #ExtCmdConsole,D1
  7891.     MOVE.L    #1005,D2
  7892.     MOVE.L    DOSBase,A6
  7893.     JSR    LVOOpen(A6)
  7894.     MOVE.L    D0,ExtCmdWindow
  7895.     BEQ.S    winderr
  7896.     LSL.L    #2,D0
  7897.     MOVE.L    D0,A0
  7898.     MOVE.L    PTProcess,A1
  7899.     MOVE.L    8(A0),$A4(A1)
  7900.     BSR    GotoCLI
  7901.     MOVE.L    ExtCmdWindow,D1
  7902.     BEQ    Return1
  7903.     MOVE.L    DOSBase,A6
  7904.     JSR    LVOClose(A6)
  7905.     CLR.L    ExtCmdWindow
  7906.     RTS
  7907.  
  7908. winderr    LEA    ConsoleErrText,A0
  7909.     BSR    ShowStatusText
  7910.     BRA    SetErrorPtrCol
  7911.  
  7912. ExtCmdNumber    dc.w 0
  7913. ExtCmdAddress    dc.l 0
  7914. ExtCmdWindow    dc.l 0
  7915. ExtCmdConsole    dc.b "CON:0/0/640/150/Protracker Output Window",0
  7916. ConsoleErrText    dc.b "Can't open window",0,0
  7917.  
  7918. MultiSetup
  7919.     CMP    #44,D0
  7920.     BLO    Return1
  7921.     BSR    StorePtrCol
  7922.     BSR    SetWaitPtrCol
  7923.     MOVE    #1,GetLineFlag
  7924.     SUB    #44,D0
  7925.     LSR    #4,D0
  7926.     MOVE.B    D0,musepos
  7927. museset    MOVEQ    #0,D0
  7928.     MOVE.B    musepos,D0
  7929.     MOVE.L    D0,D1
  7930.     LSL    #4,D1
  7931.     MOVE    #52,LineCurX
  7932.     MOVE    #53,LineCurY
  7933.     ADD    D1,LineCurX
  7934.     LEA    MultiModeNext,A1
  7935.     LEA    (A1,D0.W),A1
  7936.     BSR    UpdateLineCurPos
  7937. muselop    BSR    GetHexKey
  7938.     TST.B    D1
  7939.     BEQ.S    musenul
  7940.     CMP.B    #4,D1
  7941.     BHI.S    muselop
  7942.     MOVE.B    D1,(A1)
  7943.     BSR    ShowMultiSetup
  7944.     MOVEQ    #1,D0
  7945. musenul    TST.B    D0
  7946.     BEQ.S    museabo
  7947.     ADD.B    D0,musepos
  7948.     AND.B    #3,musepos
  7949.     JSR    Wait_4000
  7950.     JSR    Wait_4000
  7951.     JSR    Wait_4000
  7952.     BRA.S    museset
  7953.  
  7954. museabo    BSR    RestorePtrCol
  7955.     CLR    GetLineFlag
  7956.     MOVE    #0,LineCurX
  7957.     MOVE    #270,LineCurY
  7958.     BSR    UpdateLineCurPos
  7959. ShowMultiSetup
  7960.     MOVE    #1926,TextOffset
  7961.     MOVE.B    MultiModeNext,D0
  7962.     BSR    PrintHexDigit
  7963.     MOVE    #1928,TextOffset
  7964.     MOVE.B    MultiModeNext+1,D0
  7965.     BSR    PrintHexDigit
  7966.     MOVE    #1930,TextOffset
  7967.     MOVE.B    MultiModeNext+2,D0
  7968.     BSR    PrintHexDigit
  7969.     MOVE    #1932,TextOffset
  7970.     MOVE.B    MultiModeNext+3,D0
  7971.     BRA    PrintHexDigit
  7972.  
  7973. musepos    dc.b 0,0
  7974.  
  7975. SetRed    CMP    #82,D0
  7976.     BHS    SelectColor
  7977. setr2    BSR    GetColPos
  7978.     AND    #$0F00,D2
  7979.     LSR    #8,D2
  7980.     CMP.B    D2,D0
  7981.     BEQ.S    setrskp
  7982.     AND    #$00FF,D1
  7983.     LSL    #8,D0
  7984.     OR    D0,D1
  7985.     MOVE    D1,(A0)
  7986.     BSR    ShowColSliders
  7987.     BSR    SetScreenColors
  7988. setrskp    BTST    #6,$BFE001
  7989.     BEQ.S    setr2
  7990.     RTS
  7991.  
  7992. SetGreen
  7993.     CMP    #82,D0
  7994.     BHS    SelectColor
  7995. setg2    BSR.S    GetColPos
  7996.     AND    #$00F0,D2
  7997.     LSR    #4,D2
  7998.     CMP.B    D2,D0
  7999.     BEQ.S    setgskp
  8000.     AND    #$0F0F,D1
  8001.     LSL    #4,D0
  8002.     OR    D0,D1
  8003.     MOVE    D1,(A0)
  8004.     BSR    ShowColSliders
  8005.     BSR    SetScreenColors
  8006. setgskp    BTST    #6,$BFE001
  8007.     BEQ.S    setg2
  8008.     RTS
  8009.  
  8010. SetBlue    CMP    #82,D0
  8011.     BHS    SelectColor
  8012. setb2    BSR.S    GetColPos
  8013.     AND    #$000F,D2
  8014.     CMP.B    D2,D0
  8015.     BEQ.S    setbskp
  8016.     AND    #$0FF0,D1
  8017.     OR    D0,D1
  8018.     MOVE    D1,(A0)
  8019.     BSR    ShowColSliders
  8020.     BSR    SetScreenColors
  8021. setbskp    BTST    #6,$BFE001
  8022.     BEQ.S    setb2
  8023.     RTS
  8024.  
  8025. GetColPos
  8026.     MOVEQ    #0,D0
  8027.     MOVE    MouseX,D0
  8028.     CMP    #26,D0
  8029.     BHS.S    gcpskp2
  8030.     MOVEQ    #0,D0
  8031.     BRA.S    gcpskip
  8032. gcpskp2    SUB    #26,D0
  8033.     DIVU    #3,D0
  8034.     AND.L    #$FF,D0
  8035.     CMP    #15,D0
  8036.     BLS.S    gcpskip
  8037.     MOVEQ    #15,D0
  8038. gcpskip    CMP    #7,CurrScreen
  8039.     BEQ    GetColAddr
  8040.     LEA    ColorTable,A0
  8041.     MOVE    CurrColor,D1
  8042.     ADD    D1,D1
  8043.     LEA    (A0,D1.W),A0
  8044.     MOVE    (A0),D1
  8045.     MOVE    D1,D2
  8046.     RTS
  8047.  
  8048. ShowColSliders
  8049.     LEA    ColSliders(PC),A2
  8050.     MOVE.L    TextBplPtr,A1
  8051.     ADD.L    #3282,A1
  8052.     BSR.S    gcpskip
  8053.     AND    #$000F,D1
  8054.     BSR.S    ShowOneSlider
  8055.     MOVE.L    TextBplPtr,A1
  8056.     ADD.L    #2842,A1
  8057.     BSR.S    gcpskip
  8058.     AND    #$00F0,D1
  8059.     LSR    #4,D1
  8060.     BSR.S    ShowOneSlider
  8061.     MOVE.L    TextBplPtr,A1
  8062.     ADD.L    #2402,A1
  8063.     BSR.S    gcpskip
  8064.     AND    #$0F00,D1
  8065.     LSR    #8,D1
  8066. ShowOneSlider
  8067.     CLR.L    (A1)
  8068.     CLR.L    4(A1)
  8069.     CLR.L    40(A1)
  8070.     CLR.L    44(A1)
  8071.     CLR.L    80(A1)
  8072.     CLR.L    84(A1)
  8073.     MOVE    D1,D3
  8074.     ADD    D3,D3
  8075.     ADD    D3,D3
  8076.     MOVE    2(A2,D3.W),D4
  8077.     MOVE.B    0(A2,D3.W),00(A1,D4.W)
  8078.     MOVE.B    1(A2,D3.W),01(A1,D4.W)
  8079.     MOVE.B    0(A2,D3.W),40(A1,D4.W)
  8080.     MOVE.B    1(A2,D3.W),41(A1,D4.W)
  8081.     MOVE.B    0(A2,D3.W),80(A1,D4.W)
  8082.     MOVE.B    1(A2,D3.W),81(A1,D4.W)
  8083.     RTS
  8084.  
  8085. ColSliders
  8086.     dc.w %0000000001111100,0
  8087.     dc.w %0000111110000000,1
  8088.     dc.w %0000000111110000,1
  8089.     dc.w %0000000000111110,1
  8090.     dc.w %0000011111000000,2
  8091.     dc.w %0000000011111000,2
  8092.     dc.w %0000000000011111,2
  8093.     dc.w %0000001111100000,3
  8094.     dc.w %0000000001111100,3
  8095.     dc.w %0000111110000000,4
  8096.     dc.w %0000000111110000,4
  8097.     dc.w %0000000000111110,4
  8098.     dc.w %0000011111000000,5
  8099.     dc.w %0000000011111000,5
  8100.     dc.w %0000000000011111,5
  8101.     dc.w %0000001111100000,6
  8102.  
  8103. SelectColor
  8104.     CMP    #84,D1
  8105.     BHS    Return1
  8106.     MOVE.L    TextBplPtr,A0
  8107.     LEA    2410(A0),A0
  8108.     MOVEQ    #24,D2
  8109. slcloop    CLR.L    (A0)
  8110.     LEA    40(A0),A0
  8111.     DBF    D2,slcloop
  8112.  
  8113.     SUB    #82,D0
  8114.     DIVU    #13,D0
  8115.     SUB    #60,D1
  8116.     DIVU    #6,D1
  8117.     MOVE    D0,D2
  8118.     LSL    #2,D2
  8119.     ADD    D1,D2
  8120.     MOVE    D2,CurrColor
  8121. MarkColor
  8122.     BSR    gcpskip
  8123.     MOVE.L    A0,UndoColAddr
  8124.     MOVE    D1,UndoCol
  8125.     BSR    ShowColSliders
  8126.     BSR.S    BlockColors
  8127.     MOVE    CurrColor,D0
  8128.     MOVE    D0,D1
  8129.     AND    #$0003,D1
  8130.     MULU    #6*40,D1
  8131.     MOVE.L    TextBplPtr,A0
  8132.     ADD.L    D1,A0
  8133.     LEA    2410(A0),A0
  8134.     BTST    #2,D0
  8135.     BNE.S    slcskip
  8136.     MOVE    #$3FF0,(A0)
  8137.     MOVE    #$3FF0,240(A0)
  8138.     MOVEQ    #4,D0
  8139. slclop2    LEA    40(A0),A0
  8140.     MOVE    #$2010,(A0)
  8141.     DBF    D0,slclop2
  8142.     BRA    WaitForButtonUp
  8143.  
  8144. slcskip    MOVE.L    #$0001FF80,(A0)
  8145.     MOVE.L    #$0001FF80,240(A0)
  8146.     MOVEQ    #4,D0
  8147. slclop3    LEA    40(A0),A0
  8148.     MOVE.L    #$0001FF80,(A0)
  8149.     DBF    D0,slclop3
  8150.     BRA    WaitForButtonUp
  8151.  
  8152. BlockColors
  8153.     MOVE.L    TextBplPtr,A0
  8154.     LEA    2452(A0),A0
  8155.     MOVEQ    #3,D1
  8156. suploop2
  8157.     MOVEQ    #4,D0
  8158. suploop3
  8159.     MOVE.B    #$FF,(A0)
  8160.     ADD.L    #40,A0
  8161.     DBF    D0,suploop3
  8162.     ADD.L    #40,A0
  8163.     DBF    D1,suploop2
  8164.     RTS
  8165.  
  8166. ColorGadgets
  8167.     CMP    #79,D0
  8168.     BHS    SetDefaultCol
  8169.     CMP    #33,D0
  8170.     BHS.S    CancelCol
  8171.     MOVE.L    UndoColAddr,A0
  8172.     MOVE    UndoCol,D0
  8173.     MOVE    (A0),UndoCol
  8174.     MOVE    D0,(A0)
  8175.     BSR    ShowColSliders
  8176.     BRA    SetScreenColors
  8177.  
  8178. CancelCol
  8179.     LEA    CanCols(PC),A0
  8180.     LEA    ColorTable,A1
  8181.     MOVEQ    #7,D0
  8182. cacolop    MOVE    (A0)+,(A1)+
  8183.     DBF    D0,cacolop
  8184.     BSR    ShowColSliders
  8185.     BRA    SetScreenColors
  8186.  
  8187. CopyCfgData
  8188.     LEA    ColorTable,A0
  8189.     LEA    CanCols(PC),A1
  8190.     MOVEQ    #7,D0
  8191. cocclop    MOVE    (A0)+,(A1)+
  8192.     DBF    D0,cocclop
  8193.     LEA    ModulesPath2,A0
  8194.     MOVE    #195,D0
  8195. cocclp2    CLR.B    (A0)+
  8196.     DBF    D0,cocclp2
  8197.     LEA    ModulesPath,A0
  8198.     LEA    ModulesPath2,A1
  8199.     BSR.S    cocclp3
  8200.     LEA    SongsPath,A0
  8201.     LEA    SongsPath2,A1
  8202.     BSR.S    cocclp3
  8203.     LEA    SamplePath,A0
  8204.     LEA    SamplePath2,A1
  8205. cocclp3    MOVE.B    (A0)+,(A1)+
  8206.     BNE.S    cocclp3
  8207.     LEA    VUMeterColors,A0
  8208.     LEA    SaveColors,A1
  8209.     MOVEQ    #40+48-1,D0
  8210. cocclp4    MOVE    (A0)+,(A1)+
  8211.     DBF    D0,cocclp4
  8212.     RTS
  8213.  
  8214. UndoCol        dc.w 0
  8215. UndoColAddr    dc.l 0
  8216. CanCols        dc.w 0,0,0,0,0,0,0,0
  8217.  
  8218. SetDefaultCol
  8219.     LEA    DefCol,A0
  8220.     LEA    ColorTable,A1
  8221.     MOVEQ    #7,D0
  8222. sdcloop    MOVE    (A0)+,(A1)+
  8223.     DBF    D0,sdcloop
  8224.     BSR    ShowColSliders
  8225. SetScreenColors
  8226.     BSR    SetupAnaCols
  8227. SetScreenColors2
  8228.     LEA    ColorTable,A0
  8229.     LEA    CopCol0,A1
  8230.     MOVE    (A0),(A1)
  8231.     MOVE    2(A0),4(A1)
  8232.     MOVE    4(A0),8(A1)
  8233.     MOVE    6(A0),12(A1)
  8234.     MOVE    8(A0),16(A1)
  8235.     MOVE    10(A0),20(A1)
  8236.     MOVE    12(A0),24(A1)
  8237.     MOVE    14(A0),28(A1)
  8238.     MOVE    14(A0),D0
  8239.     TST    SamScrEnable
  8240.     BEQ.S    sscnosc
  8241.     MOVE    8(A0),D0
  8242. sscnosc    MOVE    D0,NoteCol
  8243.     MOVE    10(A0),D0
  8244.     MOVE    D0,D4
  8245.     MOVE    #3,FadeX
  8246.     BSR.S    FadeCol
  8247.     MOVE    D0,32(A1)
  8248.     MOVE    D4,36(A1)
  8249.     MOVE    D4,D0
  8250.     MOVE    #-3,FadeX
  8251.     BSR.S    FadeCol
  8252.     MOVE    D0,40(A1)
  8253.     RTS
  8254.  
  8255. FadeCol    MOVE    D0,D1
  8256.     MOVE    D0,D2
  8257.     MOVE    D0,D3
  8258.     LSR    #8,D1
  8259.     ADD    FadeX(PC),D1
  8260.     BPL.S    redskp
  8261.     MOVEQ    #0,D1
  8262. redskp    CMP    #15,D1
  8263.     BLS.S    redskp2
  8264.     MOVEQ    #15,D1
  8265. redskp2    AND    #$00F0,D2
  8266.     LSR    #4,D2
  8267.     ADD    FadeX(PC),D2
  8268.     BPL.S    grnskp
  8269.     MOVEQ    #0,D2
  8270. grnskp    CMP    #15,D2
  8271.     BLS.S    grnskp2
  8272.     MOVEQ    #15,D2
  8273. grnskp2    AND    #$000F,D3
  8274.     ADD    FadeX(PC),D3
  8275.     BPL.S    bluskp
  8276.     MOVEQ    #0,D3
  8277. bluskp    CMP    #15,D3
  8278.     BLS.S    bluskp2
  8279.     MOVEQ    #15,D3
  8280. bluskp2    MOVE    D3,D0
  8281.     LSL    #4,D2
  8282.     OR    D2,D0
  8283.     LSL    #8,D1
  8284.     OR    D1,D0
  8285.     RTS
  8286.  
  8287. CurrColor    dc.w    0
  8288. FadeX        dc.w    -3
  8289.  
  8290. EnterPrintPath
  8291.     BSR    StorePtrCol
  8292.     BSR    SetWaitPtrCol
  8293.     LEA    PrintPath,A6
  8294.     MOVE.L    A6,ShowTextPtr
  8295.     MOVE.L    A6,TextEndPtr
  8296.     ADD.L    #31,TextEndPtr
  8297.     MOVE    #12,TextLength
  8298.     MOVE    #3694,A4
  8299.     BSR    GetTextLine
  8300.     BRA    RestorePtrCol
  8301.  
  8302. ShowPrintPath
  8303.     LEA    PrintPath,A0
  8304.     MOVE    #3694,D1
  8305.     MOVEQ    #12,D0
  8306.     BRA    ShowText3
  8307.  
  8308. ; Print Song
  8309.  
  8310. PrintSong
  8311.     LEA    PrintSongText,A0
  8312.     BSR    AreYouSure
  8313.     BNE    Return1
  8314.     BSR    StorePtrCol
  8315.     MOVE.L    #PrintPath,D1
  8316.     MOVE.L    #1006,D2
  8317.     MOVE.L    DOSBase,A6
  8318.     JSR    LVOOpen(A6)
  8319.     MOVE.L    D0,FileHandle
  8320.     BEQ    CantOpenFile
  8321.     BSR    SetDiskPtrCol
  8322.     LEA    PrintingSongText,A0
  8323.     BSR    ShowStatusText
  8324.     MOVE.L    FileHandle,D1
  8325.     MOVE.L    #SongDumpText,D2
  8326.     MOVEQ    #68,D3
  8327.     MOVE.L    DOSBase,A6
  8328.     JSR    LVOWrite(A6)
  8329.     MOVE.L    FileHandle,D1
  8330.     MOVE.L    SongDataPtr,D2
  8331.     MOVEQ    #20,D3
  8332.     JSR    LVOWrite(A6)
  8333.     BSR    PrintCRLF
  8334.     BSR    PrintCRLF
  8335.     BSR    PrintSong2
  8336.     BSR    PrintCRLF
  8337.     BSR    PrintSong4
  8338.     BSR    PrintFormFeed
  8339.     MOVE.L    SongDataPtr,A0
  8340.     MOVEQ    #0,D0
  8341.     MOVE.B    sd_numofpatt(A0),D0
  8342.     LEA    sd_pattpos(A0),A0
  8343.     MOVEQ    #0,D7
  8344. ps_loop    CMP.B    (A0,D0.W),D7
  8345.     BGT.S    ps_skip
  8346.     MOVE.B    (A0,D0.W),D7
  8347. ps_skip    SUBQ    #1,D0
  8348.     BPL.S    ps_loop
  8349.     MOVEQ    #0,D1
  8350. ps_loop2
  8351.     MOVEM.L    D1-D7/A0-A6,-(SP)
  8352.     BSR    PrintPattern
  8353.     MOVEM.L    (SP)+,D1-D7/A0-A6
  8354.     TST.L    D0
  8355.     BNE.S    ps_skip2
  8356.     MOVEM.L    D1/D7,-(SP)
  8357.     BSR    PrintFormFeed
  8358.     MOVEM.L    (SP)+,D1/D7
  8359.     ADDQ    #1,D1
  8360.     CMP    D7,D1
  8361.     BLO.S    ps_loop2
  8362. ps_skip2
  8363.     MOVE.L    DOSBase,A6
  8364.     MOVE.L    FileHandle,D1
  8365.     JSR    LVOClose(A6)
  8366.     BSR    ShowAllRight
  8367.     BRA    RestorePtrCol
  8368.  
  8369. PrintSong2
  8370.     MOVEQ    #1,D7
  8371. ps2_2    MOVE.L    D7,D0
  8372.     LSR.B    #4,D0
  8373.     CMP.B    #9,D0
  8374.     BLS.S    spujk
  8375.     ADDQ.B    #7,D0
  8376. spujk    ADD.B    #'0',D0
  8377.     MOVE.B    D0,PattXText1
  8378.     MOVE.B    D7,D0
  8379.     AND.B    #$0F,D0
  8380.     CMP.B    #9,D0
  8381.     BLS.S    spujk2
  8382.     ADDQ.B    #7,D0
  8383. spujk2    ADD.B    #'0',D0
  8384.     MOVE.B    D0,PattXText2
  8385.  
  8386.     MOVE.L    SongDataPtr,A0
  8387.     MOVE    D7,D0
  8388.     MULU    #30,D0
  8389.     LEA    -10(A0,D0.W),A0
  8390.     LEA    PpText,A1
  8391.     MOVEQ    #21,D0
  8392. ps2_loop
  8393.     MOVE.B    #' ',(A1)+
  8394.     DBF    D0,ps2_loop
  8395.     LEA    PpText,A1
  8396.  
  8397.     MOVE.L    A0,SavIt
  8398. ps2_loop2
  8399.     MOVE.B    (A0)+,D0
  8400.     BEQ    PrintSong3
  8401.     MOVE.B    D0,(A1)+
  8402.     BRA.S    ps2_loop2
  8403.  
  8404. SavIt    dc.l    0
  8405.  
  8406. PrintSong3
  8407.     MOVE.L    D7,-(SP)            ; pattnum
  8408.     MOVE.L    SavIt(PC),A0
  8409.     MOVE    22(A0),D0
  8410.     ADD    D0,D0
  8411.     LEA    Prafs+2+4,A0
  8412.     BSR    IntToHexASCII
  8413.     MOVE.L    SavIt(PC),A0
  8414.     MOVE    26(A0),D0
  8415.     ADD    D0,D0
  8416.     LEA    Prafs+8+4,A0
  8417.     BSR    IntToHexASCII
  8418.     MOVE.L    SavIt(PC),A0
  8419.     MOVE    28(A0),D0
  8420.     ADD    D0,D0
  8421.     LEA    Prafs+14+4,A0
  8422.     BSR    IntToHexASCII
  8423.     MOVE.L    DOSBase,A6
  8424.     MOVE.L    FileHandle,D1
  8425.     MOVE.L    #PtotText,D2
  8426.     MOVEQ    #52,D3
  8427.     JSR    LVOWrite(A6)
  8428.     MOVE.L    (SP)+,D7
  8429.     ADDQ    #1,D7
  8430.     CMP    #$0020,D7
  8431.     BNE    ps2_2
  8432.     RTS
  8433.  
  8434. PrintSong4
  8435.     MOVE.L    SongDataPtr,A0
  8436.     MOVEQ    #0,D7
  8437.     MOVE.B    sd_numofpatt(A0),D7
  8438.     LEA    sd_pattpos(A0),A0
  8439.     MOVEQ    #0,D5
  8440. ps4_loop1
  8441.     MOVEQ    #0,D6
  8442. ps4_loop2
  8443.     MOVEQ    #0,D0
  8444.     MOVE.B    (A0)+,D0
  8445.     MOVE    D0,D1
  8446.     LSR    #4,D1
  8447.     ADD.B    #$30,D1
  8448.     CMP.B    #$39,D1
  8449.     BLS.S    ps4_skip
  8450.     ADDQ.B    #7,D1
  8451. ps4_skip
  8452.     AND.B    #15,D0
  8453.     ADD.B    #$30,D0
  8454.     CMP.B    #$39,D0
  8455.     BLS.S    ps4_skip2
  8456.     ADDQ.B    #7,D0
  8457. ps4_skip2
  8458.     LEA    PnText,A1
  8459.     MOVE.B    D1,(A1)+
  8460.     MOVE.B    D0,(A1)
  8461.     MOVEM.L    D5-D7/A0,-(SP)
  8462.     MOVE.L    DOSBase,A6
  8463.     MOVE.L    FileHandle,D1
  8464.     MOVE.L    #PnText,D2
  8465.     MOVEQ    #4,D3
  8466.     JSR    LVOWrite(A6)
  8467.     MOVEM.L    (SP)+,D5-D7/A0
  8468.     ADDQ    #1,D5
  8469.     CMP    D5,D7
  8470.     BEQ    Return1
  8471.     ADDQ    #1,D6
  8472.     CMP    #$0010,D6
  8473.     BNE.S    ps4_loop2
  8474.     MOVEM.L    D5-D7/A0,-(SP)
  8475.     BSR.S    PrintCRLF
  8476.     MOVEM.L    (SP)+,D5-D7/A0
  8477.     BRA.S    ps4_loop1
  8478.  
  8479. PrintCRLF
  8480.     MOVE.L    DOSBase,A6
  8481.     MOVE.L    FileHandle,D1
  8482.     MOVE.L    #CRLF_Text,D2
  8483.     MOVEQ    #2,D3
  8484.     JSR    LVOWrite(A6)
  8485.     RTS
  8486.  
  8487. PrintFormFeed
  8488.     MOVE.L    DOSBase,A6
  8489.     MOVE.L    FileHandle,D1
  8490.     MOVE.L    #FF_Text,D2
  8491.     MOVEQ    #1,D3
  8492.     JSR    LVOWrite(A6)
  8493.     RTS
  8494.  
  8495. PrintPattern
  8496.     MOVE.L    D1,D6 ; D1=pattern number
  8497.     DIVU    #10,D6
  8498.     ADD.B    #'0',D6
  8499.     MOVE.B    D6,PattNumText1
  8500.     SWAP    D6
  8501.     ADD.B    #'0',D6
  8502.     MOVE.B    D6,PattNumText2
  8503.     MOVEM.L    D0-D7/A0-A6,-(SP)
  8504.     MOVE.L    FileHandle,D1
  8505.     MOVE.L    #PatternNumText,D2
  8506.     MOVEQ    #18,D3
  8507.     MOVE.L    DOSBase,A6
  8508.     JSR    LVOWrite(A6)
  8509.     MOVEM.L    (SP)+,D0-D7/A0-A6
  8510.  
  8511.     MOVE.L    D1,D6
  8512.     MOVE.L    SongDataPtr,A6
  8513.     LEA    sd_patterndata(A6),A6
  8514.     LSL.L    #8,D6
  8515.     LSL.L    #2,D6
  8516.     ADD.L    D6,A6
  8517.     CLR.L    PPattPos
  8518.     MOVEQ    #0,D6
  8519. pp_posloop
  8520.     MOVEQ    #0,D7
  8521.     MOVE    #2,TextLength
  8522.     MOVE.L    PPattPos,D1
  8523.     LEA    PattPosText,A5
  8524.     DIVU    #10,D1
  8525.     ADD.B    #'0',D1
  8526.     MOVE.B    D1,(A5)+
  8527.     CLR    D1
  8528.     SWAP    D1
  8529.     ADD.B    #'0',D1
  8530.     MOVE.B    D1,(A5)+
  8531.     ADDQ.L    #5,A5
  8532. pp_noteloop
  8533.     MOVEQ    #0,D0
  8534.     MOVEQ    #0,D1
  8535.     MOVE    #3,TextLength
  8536.     MOVE    (A6),D1
  8537.     AND    #$0FFF,D1
  8538.     LEA    PeriodTable,A0
  8539. pp_findloop
  8540.     CMP    0(A0,D0.L),D1
  8541.     BEQ    PrintNote
  8542.     ADDQ.L    #2,D0
  8543.     BRA.S    pp_findloop
  8544.  
  8545. PrintNote
  8546.     ADD.L    D0,D0
  8547.     ADD.L    NoteNamesPtr,D0
  8548.     MOVE.L    D0,A0
  8549.     MOVE.L    (A0),(A5)+
  8550.     CMP.B    #'¡',-3(A5)
  8551.     BNE.S    prnoxyz
  8552.     MOVE.B    #'b',-3(A5)
  8553. prnoxyz    ADDQ.L    #1,A5
  8554.     MOVEQ    #0,D0
  8555.     MOVE    (A6),D0
  8556.     AND    #$F000,D0
  8557.     LSR    #8,D0
  8558.     LSL.L    #1,D0
  8559.     LEA    FastHexTable,A0
  8560.     ADD.L    D0,A0
  8561.     MOVE.B    (A0),(A5)+
  8562.     MOVEQ    #0,D0
  8563.     MOVE.B    2(A6),D0
  8564.     LSL.L    #1,D0
  8565.     LEA    FastHexTable,A0
  8566.     ADD.L    D0,A0
  8567.     MOVE    (A0),(A5)+
  8568.     MOVEQ    #0,D0
  8569.     MOVE.B    3(A6),D0
  8570.     LSL.L    #1,D0
  8571.     LEA    FastHexTable,A0
  8572.     ADD.L    D0,A0
  8573.     MOVE    (A0),(A5)+
  8574.     ADDQ.L    #4,A5
  8575.     ADDQ.L    #4,A6
  8576.     ADDQ.L    #1,D7
  8577.     CMP.L    #4,D7
  8578.     BNE    pp_noteloop
  8579.     ADDQ.L    #1,PPattPos
  8580.     MOVEM.L    D0-D7/A0-A6,-(SP)
  8581.     MOVE.L    DOSBase,A6
  8582.     MOVE.L    FileHandle,D1
  8583.     MOVE.L    #PnText2,D2
  8584.     MOVEQ    #68,D3
  8585.     JSR    LVOWrite(A6)
  8586.     BSR    PrintCRLF
  8587.     MOVEM.L    (SP)+,D0-D7/A0-A6
  8588.     BTST    #2,$DFF016
  8589.     BEQ.S    NegativeReturn
  8590.     ADDQ.L    #1,D6
  8591.     CMP.L    #64,D6
  8592.     BNE    pp_posloop
  8593.     MOVEQ    #0,D0
  8594.     RTS
  8595.  
  8596. NegativeReturn
  8597.     MOVEQ    #-1,D0
  8598.     RTS
  8599.  
  8600. PositiveReturn
  8601.     MOVEQ    #0,D0
  8602.     RTS
  8603.  
  8604. ;---- Setup2 ----
  8605.  
  8606. Setup2    BSR    WaitForButtonUp
  8607.     MOVE    #7,CurrScreen
  8608.     CLR    LastSetupScreen
  8609.     ST    DisableAnalyzer
  8610.     ST    NoSampleInfo
  8611.     BSR    Clear100Lines
  8612.     MOVE.L    SetupMemPtr,D0
  8613.     BNE    set2skp
  8614.     BSR    SaveMainPic
  8615.     BEQ    ExitSetup
  8616. set2skp    BSR    DecompactSetup2
  8617.     BSR    SetScreenColors
  8618. refrsh2    BSR    ShowIntMode
  8619.     BSR    ShowTempo
  8620.     BSR    ShowSpeed
  8621.     BSR    ShowColEdit
  8622.     BSR    ShowRainbow
  8623.     BSR    GetColPos
  8624.     BSR    ShowColSliders
  8625.     BSR    ShowS2Modules
  8626.     BSR    ShowS2Songs
  8627.     BSR    ShowS2Samples
  8628.     BSR    ShowS2PTPath
  8629.     BSR    ShowS2MaxPLST
  8630.     BSR    ShowS2DMAWait
  8631.     BSR    ShowS2TuneNote
  8632.     BSR    ShowS2SalvAddr
  8633.     BRA    ShowS2T
  8634.  
  8635. CheckSetup2Gadgs
  8636.     MOVEM.W    MouseX2,D0/D1
  8637.     CMP    #210,D0
  8638.     BHS    Setup2Menu3
  8639.     CMP    #108,D0
  8640.     BHS.S    Setup2Menu2
  8641. ;---- Menu 1 ----
  8642.     CMP    #11,D1
  8643.     BLS    ToggleIntMode
  8644.     CMP    #22,D1
  8645.     BLS    ChangeTempo
  8646.     CMP    #33,D1
  8647.     BLS    ChangeSpeed
  8648.     CMP    #44,D1
  8649.     BLS    ToggleColEdit
  8650.     CMP    #55,D1
  8651.     BLS    RotOrSpread
  8652.     CMP    #66,D1
  8653.     BLS    SetRed2
  8654.     CMP    #77,D1
  8655.     BLS    SetGreen2
  8656.     CMP    #88,D1
  8657.     BLS    SetBlue2
  8658.     CMP    #99,D1
  8659.     BLS    ColorGadgets2
  8660.     RTS
  8661.  
  8662. Setup2Menu2
  8663.     CMP    #11,D1
  8664.     BLS    Set2ModPath
  8665.     CMP    #22,D1
  8666.     BLS    Set2SongPath
  8667.     CMP    #33,D1
  8668.     BLS    Set2SamPath
  8669.     CMP    #44,D1
  8670.     BLS    Set2PTPath
  8671.     CMP    #55,D1
  8672.     BLS    SetS2MaxPLST
  8673.     CMP    #66,D1
  8674.     BLS    SetS2DMAWait
  8675.     CMP    #77,D1
  8676.     BLS    SetS2TuneNote
  8677.     CMP    #88,D1
  8678.     BLS    SetS2SalvAddr
  8679.     CMP    #99,D1
  8680.     BLS    RecoverSong
  8681.     RTS
  8682.  
  8683. Setup2Menu3
  8684.     CMP    #11,D1
  8685.     BLS    ExitOrDefault
  8686.     CMP    #22,D1
  8687.     BLS    ToggleOverride
  8688.     CMP    #33,D1
  8689.     BLS    ToggleNosamples
  8690.     CMP    #44,D1
  8691.     BLS    ToggleBlankZero
  8692.     CMP    #55,D1
  8693.     BLS    ToggleShowDirs
  8694.     CMP    #66,D1
  8695.     BLS    ToggleShowPublic
  8696.     CMP    #77,D1
  8697.     BLS    ToggleCutToBuf
  8698.     CMP    #88,D1
  8699.     BLS    ToggleIFFLoop
  8700.     CMP    #99,D1
  8701.     BLS    ToggleHH
  8702.     RTS
  8703.  
  8704. ExitOrDefault
  8705.     CMP    #265,D0
  8706.     BLS.S    SetS2Default
  8707.     CMP    #306,D0
  8708.     BHS    Setup
  8709.     BRA    ExitSetup
  8710.  
  8711. SetS2Default
  8712.     LEA    SetDefaultsText(PC),A0
  8713.     BSR    AreYouSure
  8714.     BNE    Return1
  8715.     LEA    DefaultSetupData,A0
  8716.     LEA    DefaultSongsPath,A2
  8717.     LEA    SongsPath,A1
  8718.     MOVEQ    #95,D0
  8719. ss2dela    MOVE.B    (A2)+,(A1)+
  8720.     DBF    D0,ss2dela
  8721.     LEA    DefaultPTPath,A2
  8722.     LEA    PTPath,A1
  8723.     MOVEQ    #31,D0
  8724. ss2delb    MOVE.B    (A2)+,(A1)+
  8725.     DBF    D0,ss2delb
  8726.     LEA    DefaultMaxPLSTEntries,A2
  8727.     MOVE    (A2),MaxPLSTEntries
  8728.     LEA    DefaultDMAWait,A2
  8729.     MOVE    (A2),DMAWait
  8730.     LEA    DefaultTuneNote,A2
  8731.     MOVE.L    (A2),TuneNote
  8732.     LEA    DefaultSalvageAddress,A2
  8733.     LEA    SalvageAddress,A1
  8734.     MOVE.L    (A2)+,(A1)+
  8735.     MOVE.L    (A2),(A1)
  8736.     BRA    refrsh2
  8737.  
  8738. SetDefaultsText
  8739.     dc.b "Set defaults?",0
  8740.  
  8741. ToggleIntMode
  8742.     BSR    ResetMusicInt
  8743.     EOR.B    #1,IntMode
  8744.     BSR    SetMusicInt
  8745.     BSR    SetTempo
  8746.     BSR    WaitForButtonUp
  8747. ShowIntMode
  8748.     LEA    VBlankText(PC),A0
  8749.     TST.B    IntMode
  8750.     BEQ.S    simskip
  8751.     LEA    CIAText(PC),A0
  8752. simskip    MOVEQ    #6,D0
  8753.     MOVE    #167,D1
  8754.     BRA    ShowText3
  8755.  
  8756. VBlankText    dc.b "VBLANK"
  8757. CIAText        dc.b " CIA  "
  8758.  
  8759. ChangeSpeed
  8760.     MOVEQ    #0,D1
  8761.     CMP    #94,D0
  8762.     BHS.S    SpeedDown
  8763.     CMP    #80,D0
  8764.     BHS.S    SpeedUp
  8765.     RTS
  8766.  
  8767. SpeedUp    MOVE    DefaultSpeed,D1
  8768.     ADDQ.B    #1,D1
  8769.     CMP.B    #$FF,D1
  8770.     BLS.S    spedup2
  8771.     MOVE    #$FF,D1
  8772. spedup2    MOVE    D1,DefaultSpeed
  8773.     MOVE.L    D1,CurrSpeed
  8774.     BSR.S    ShowSpeed
  8775.     JSR    Wait_4000
  8776.     JMP    Wait_4000
  8777. ShowSpeed
  8778.     MOVE    #608+440,TextOffset
  8779.     MOVE    DefaultSpeed,WordNumber
  8780.     JMP    PrintHexByte
  8781.  
  8782. SpeedDown
  8783.     MOVE    DefaultSpeed,D1
  8784.     SUB.B    #1,D1
  8785.     CMP.B    #1,D1
  8786.     BHS.S    spedup2
  8787.     MOVEQ    #1,D1
  8788.     BRA.S    spedup2
  8789.  
  8790.  
  8791. ToggleOverride
  8792.     EOR.B    #1,OverrideFlag
  8793.     BRA.S    ShowS2T
  8794. ToggleNosamples
  8795.     EOR.B    #1,NosamplesFlag
  8796.     BRA.S    ShowS2T
  8797. ToggleBlankZero
  8798.     EOR.B    #1,BlankZeroFlag
  8799.     BSR.S    ShowS2T
  8800.     BRA    RedrawPattern
  8801. ToggleShowDirs
  8802.     EOR.B    #1,ShowDirsFlag
  8803.     BRA.S    ShowS2T
  8804. ToggleShowPublic
  8805.     EOR.B    #1,ShowPublicFlag
  8806.     MOVE    #1,UpdateFreeMem
  8807.     BRA.S    ShowS2T
  8808. ToggleCutToBuf
  8809.     EOR.B    #1,CutToBufFlag
  8810.     BRA.S    ShowS2T
  8811. ToggleIFFLoop
  8812.     EOR.B    #1,IFFLoopFlag
  8813.     BRA.S    ShowS2T
  8814. ToggleHH
  8815.     EOR.B    #1,HHFlag
  8816.  
  8817. ShowS2T    CLR.B    RawKeyCode
  8818.     CMP    #7,CurrScreen
  8819.     BNE    Return1
  8820.     LEA    OverrideFlag,A4
  8821.     MOVE    #3,TextLength
  8822.     MOVEQ    #7,D7
  8823.     MOVE    #636,D6
  8824. sstloop2
  8825.     MOVE    D6,TextOffset
  8826.     LEA    ToggleOFFText,A0
  8827.     TST.B    (A4)+
  8828.     BEQ.S    sstskip2
  8829.     LEA    ToggleONText,A0
  8830. sstskip2
  8831.     BSR    ShowText2
  8832.     ADD    #440,D6
  8833.     DBF    D7,sstloop2
  8834.     BRA    WaitForButtonUp
  8835.  
  8836. ShowS2Modules
  8837.     MOVE    #177,D1
  8838.     LEA    ModulesPath,A0
  8839. s2path    MOVEQ    #9,D0
  8840.     BRA    ShowText3
  8841.  
  8842. ShowS2Songs
  8843.     MOVE    #177+440,D1
  8844.     LEA    SongsPath,A0
  8845.     BRA.S    s2path
  8846.  
  8847. ShowS2Samples
  8848.     MOVE    #177+880,D1
  8849.     LEA    SamplePath,A0
  8850.     BRA.S    s2path
  8851.  
  8852. ShowS2PTPath
  8853.     MOVE    #177+1320,D1
  8854.     LEA    PTPath,A0
  8855.     BRA.S    s2path
  8856.  
  8857.  
  8858. Set2ModPath
  8859.     BSR    StorePtrCol
  8860.     BSR    SetWaitPtrCol
  8861.     LEA    ModulesPath,A6
  8862.     MOVE.L    A6,ShowTextPtr
  8863.     MOVE.L    A6,TextEndPtr
  8864.     ADD.L    #31,TextEndPtr
  8865.     MOVE    #9,TextLength
  8866.     MOVE    #177,A4
  8867.     BSR    GetTextLine
  8868.     BRA    RestorePtrCol
  8869.  
  8870. Set2SongPath
  8871.     BSR    StorePtrCol
  8872.     BSR    SetWaitPtrCol
  8873.     LEA    SongsPath,A6
  8874.     MOVE.L    A6,ShowTextPtr
  8875.     MOVE.L    A6,TextEndPtr
  8876.     ADD.L    #31,TextEndPtr
  8877.     MOVE    #9,TextLength
  8878.     MOVE    #177+440,A4
  8879.     BSR    GetTextLine
  8880.     BRA    RestorePtrCol
  8881.  
  8882. Set2SamPath
  8883.     BSR    StorePtrCol
  8884.     BSR    SetWaitPtrCol
  8885.     LEA    SamplePath,A6
  8886.     MOVE.L    A6,ShowTextPtr
  8887.     MOVE.L    A6,TextEndPtr
  8888.     ADD.L    #31,TextEndPtr
  8889.     MOVE    #9,TextLength
  8890.     MOVE    #177+880,A4
  8891.     BSR    GetTextLine
  8892.     BRA    RestorePtrCol
  8893.  
  8894. Set2PTPath
  8895.     BSR    StorePtrCol
  8896.     BSR    SetWaitPtrCol
  8897.     LEA    PTPath,A6
  8898.     MOVE.L    A6,ShowTextPtr
  8899.     MOVE.L    A6,TextEndPtr
  8900.     ADD.L    #31,TextEndPtr
  8901.     MOVE    #9,TextLength
  8902.     MOVE    #177+1320,A4
  8903.     BSR    GetTextLine
  8904.     BRA    RestorePtrCol
  8905.  
  8906. SetS2MaxPLST
  8907.     CMP    #199,D0
  8908.     BHS.S    S2PLSTd
  8909.     CMP    #188,D0
  8910.     BHS.S    S2PLSTu
  8911.     RTS
  8912. S2PLSTu    MOVE    MaxPLSTEntries,D0
  8913.     ADD    #100,D0
  8914.     CMP    #9999,D0
  8915.     BLS.S    s2pu
  8916.     MOVE    #9999,D0
  8917. s2pu    MOVE    D0,MaxPLSTEntries
  8918.     BSR.S    ShowS2MaxPLST
  8919.     JMP    Wait_4000
  8920.  
  8921. S2PLSTd    MOVEQ    #0,D0
  8922.     MOVE    MaxPLSTEntries,D0
  8923.     ADDQ    #1,D0
  8924.     DIVU    #100,D0
  8925.     SUBQ    #1,D0
  8926.     BPL.S    s2pd
  8927.     MOVEQ    #0,D0
  8928.     BRA.S    s2pu
  8929. s2pd    MULU    #100,D0
  8930.     BRA.S    s2pu
  8931.  
  8932. ShowS2MaxPLST
  8933.     MOVE    MaxPLSTEntries,WordNumber
  8934.     MOVE    #1939,TextOffset
  8935.     BRA    Print4DecDigits
  8936.  
  8937. SetS2DMAWait
  8938.     CMP    #199,D0
  8939.     BHS.S    S2dwd
  8940.     CMP    #188,D0
  8941.     BHS.S    S2dwu
  8942.     RTS
  8943. S2dwu    MOVE    DMAWait,D0
  8944.     ADDQ    #1,D0
  8945.     BTST    #2,$DFF016
  8946.     BNE.S    s2npu
  8947.     ADD    #9,D0
  8948. s2npu    CMP    #9999,D0
  8949.     BLS.S    s2du
  8950.     MOVE    #9999,D0
  8951. s2du    MOVE    D0,DMAWait
  8952.     BSR.S    ShowS2DMAWait
  8953.     JMP    Wait_4000
  8954.  
  8955. S2dwd    MOVE    DMAWait,D0
  8956.     SUBQ    #1,D0
  8957.     BTST    #2,$DFF016
  8958.     BNE.S    s2npd
  8959.     SUB    #9,D0
  8960. s2npd    TST    D0
  8961.     BPL.S    s2du
  8962.     MOVEQ    #0,D0
  8963.     BRA.S    s2du
  8964.  
  8965. ShowS2DMAWait
  8966.     MOVE    DMAWait,WordNumber
  8967.     MOVE    #2379,TextOffset
  8968.     BRA    Print4DecDigits
  8969.  
  8970. SetS2TuneNote
  8971.     CMP    #187,D0
  8972.     BHS.S    ss2tvol
  8973.     MOVE    #2820,D1
  8974.     MOVEQ    #3,D0
  8975.     LEA    SpcNoteText,A0
  8976.     BSR    ShowText3
  8977.     MOVE    #3,SamNoteType
  8978.     MOVE.L    #TuneNote,SplitAddress
  8979.     BRA    WaitForButtonUp
  8980.  
  8981. ShowS2TuneNote
  8982.     CMP    #7,CurrScreen
  8983.     BNE    Return1
  8984.     MOVE.L    NoteNamesPtr,A4
  8985.     MOVE    TuneNote,D0
  8986.     LSL    #2,D0
  8987.     LEA    (A4,D0.W),A0
  8988.     MOVEQ    #4,D0
  8989.     MOVE    #2820,D1
  8990.     BSR    ShowText3
  8991.     MOVE    TToneVol,WordNumber
  8992.     MOVE    #2824,TextOffset
  8993.     BRA    PrintHexByte
  8994.  
  8995. ss2tvol    MOVE    #2824,TextOffset
  8996.     BSR    GetHexByte
  8997.     MOVE    D0,TToneVol
  8998.     BRA.S    ShowS2TuneNote
  8999.  
  9000. SetS2SalvAddr
  9001.     BRA    ShowNotImpl
  9002.     BSR    StorePtrCol
  9003.     BSR    SetWaitPtrCol
  9004.     LEA    SalvageAddress,A6
  9005.     MOVE.L    A6,ShowTextPtr
  9006.     MOVE.L    A6,TextEndPtr
  9007.     ADD.L    #6,TextEndPtr
  9008.     MOVE    #6,TextLength
  9009.     MOVE    #3260,A4
  9010.     MOVE.B    #5,EnterTextFlag
  9011.     BSR    GetTextLine
  9012.     CLR.B    EnterTextFlag
  9013.     BSR    RestorePtrCol
  9014. ShowS2SalvAddr
  9015.     LEA    SalvageAddress,A0
  9016.     MOVEQ    #6,D0
  9017.     MOVE    #3260,D1
  9018.     BRA    ShowText3
  9019.  
  9020. RecoverSong
  9021.     BRA    ShowNotImpl
  9022.     LEA    RecoverSongText(PC),A0
  9023.     BSR    AreYouSure
  9024.     BNE    Return1
  9025.     BSR    DoClearSong
  9026.     BSR    ClrSampleInfo
  9027.     BSR.S    FindAdr
  9028.     MOVE.L    D0,A0
  9029.     MOVE.L    SongDataPtr,A1
  9030.     MOVE.L    #70716,D0
  9031. recloop    MOVE.B    (A0)+,(A1)+
  9032.     SUBQ.L    #1,D0
  9033.     BNE.S    recloop
  9034.     BRA    RedrawPattern
  9035.  
  9036. FindAdr    LEA    SalvageAddress+6,A0
  9037.     BSR    HexToInteger
  9038.     MOVE    D0,D3
  9039.     MOVEQ    #0,D0
  9040.     BSR    HexToInteger2
  9041.     SWAP    D0
  9042.     OR    D3,D0
  9043.     RTS
  9044.  
  9045. RecoverSongText    dc.b    "Recover Song?",0
  9046.  
  9047. ToggleColEdit
  9048.     CMP    #79,D0
  9049.     BHS    SelectColor2
  9050.     CLR    SpreadFlag
  9051.     LEA    VUMeterColors,A0
  9052.     MOVEQ    #48,D0
  9053.     CMP.L    TheRightColors(PC),A0
  9054.     BNE.S    tced2
  9055.     LEA    AnalyzerColors,A0
  9056.     MOVEQ    #36,D0
  9057. tced2    MOVE.L    A0,TheRightColors
  9058.     MOVE    D0,ColorsMax
  9059.     CMP    RainbowPos(PC),D0
  9060.     BHI.S    tced3
  9061.     CLR    RainbowPos
  9062. tced3    BSR    ShowRainbow
  9063.     BSR.S    ShowColEdit
  9064.     BRA    WaitForButtonUp
  9065. ShowColEdit
  9066.     LEA    cedtxt1(PC),A0
  9067.     LEA    VUMeterColors,A1
  9068.     CMP.L    TheRightColors(PC),A1
  9069.     BEQ.S    shcoed
  9070.     LEA    cedtxt2(PC),A0
  9071. shcoed    MOVEQ    #6,D0
  9072.     MOVE    #1483,D1
  9073.     BRA    ShowText3
  9074.  
  9075. cedtxt1    dc.b "VU-MTR"
  9076. cedtxt2 dc.b "ANALYZ"
  9077.  
  9078. RotOrSpread
  9079.     CMP    #16,D0
  9080.     BLO.S    RotColUp
  9081.     CMP    #32,D0
  9082.     BLO.S    RotColDown
  9083.     CMP    #79,D0
  9084.     BHS    SelectColor2
  9085.     BRA    SpreadColors
  9086.  
  9087. RotColUp
  9088.     CLR    SpreadFlag
  9089.     MOVE.L    TheRightColors(PC),A0
  9090.     MOVE    (A0),D0
  9091.     MOVE    ColorsMax(PC),D1
  9092.     SUBQ    #2,D1
  9093. rocoup1    MOVE    2(A0),(A0)+
  9094.     DBF    D1,rocoup1
  9095.     MOVE    D0,(A0)
  9096. rocoup2    BSR    GetColPos
  9097.     BSR    ShowColSliders
  9098.     BSR    ShowRainbow
  9099.     BRA    SetupVUCols
  9100.  
  9101. RotColDown
  9102.     CLR    SpreadFlag
  9103.     MOVE.L    TheRightColors(PC),A0
  9104.     MOVE    ColorsMax(PC),D1
  9105.     ADD    D1,A0
  9106.     ADD    D1,A0
  9107.     MOVE    -(A0),D0
  9108.     SUBQ    #2,D1
  9109. rocodn1    MOVE    -2(A0),(A0)
  9110.     SUBQ.L    #2,A0
  9111.     DBF    D1,rocodn1
  9112.     MOVE    D0,(A0)
  9113.     BRA.S    rocoup2
  9114.  
  9115. SpreadColors
  9116.     MOVE    RainbowPos,SpreadFrom
  9117.     MOVE    #1,SpreadFlag
  9118.     RTS
  9119.  
  9120. SpreadFrom    dc.w 0
  9121. SpreadFlag    dc.w 0
  9122.  
  9123. ColorGadgets2
  9124.     CLR    SpreadFlag
  9125.     CMP    #79,D0
  9126.     BHS.S    SetDefaultCol2
  9127.     CMP    #33,D0
  9128.     BHS.S    CancelCol2
  9129.     MOVE.L    UndoColAddr,A0
  9130.     MOVE    UndoCol,D1
  9131.     MOVE    (A0),UndoCol
  9132.     MOVE    D1,(A0)
  9133.     BRA    rocoup2
  9134.  
  9135. SetDefaultCol2
  9136.     MOVE.L    TheRightColors(PC),A0
  9137.     MOVE.L    A0,A1
  9138.     SUB.L    #SetupData,A1
  9139.     ADD.L    #DefaultSetupData,A1
  9140. sedeco4    MOVE    ColorsMax,D0
  9141.     BRA.S    sedeco3
  9142. sedeco2    MOVE    (A1)+,(A0)+
  9143. sedeco3    DBF    D0,sedeco2
  9144.     BRA    rocoup2
  9145.  
  9146. CancelCol2
  9147.     MOVE.L    TheRightColors(PC),A0
  9148.     MOVE.L    A0,A1
  9149.     SUB.L    #VUMeterColors,A1
  9150.     ADD.L    #SaveColors,A1
  9151.     BRA.S    sedeco4
  9152.  
  9153. GetColAddr
  9154.     MOVE.L    TheRightColors(PC),A0
  9155.     MOVE    RainbowPos,D1
  9156.     ADD    D1,D1
  9157.     LEA    (A0,D1.W),A0
  9158.     MOVE    (A0),D1
  9159.     MOVE    D1,D2
  9160.     RTS
  9161.  
  9162. SetRed2    CMP    #79,D0
  9163.     BHS    SelectColor2
  9164. set2r2    BSR    GetColPos
  9165.     AND    #$0F00,D2
  9166.     LSR    #8,D2
  9167.     CMP.B    D2,D0
  9168.     BEQ.S    setrsk2
  9169.     AND    #$00FF,D1
  9170.     LSL    #8,D0
  9171.     OR    D0,D1
  9172.     MOVE    D1,(A0)
  9173.     BSR    ShowColSliders
  9174.     BSR    ShowRainbow
  9175.     BSR    SetupVUCols
  9176. setrsk2    BTST    #6,$BFE001
  9177.     BEQ.S    set2r2
  9178.     RTS
  9179.  
  9180. SetGreen2
  9181.     CMP    #79,D0
  9182.     BHS    SelectColor2
  9183. set2g2    BSR    GetColPos
  9184.     AND    #$00F0,D2
  9185.     LSR    #4,D2
  9186.     CMP.B    D2,D0
  9187.     BEQ.S    setgsk2
  9188.     AND    #$0F0F,D1
  9189.     LSL    #4,D0
  9190.     OR    D0,D1
  9191.     MOVE    D1,(A0)
  9192.     BSR    ShowColSliders
  9193.     BSR    ShowRainbow
  9194.     BSR    SetupVUCols
  9195. setgsk2    BTST    #6,$BFE001
  9196.     BEQ.S    set2g2
  9197.     RTS
  9198.  
  9199. SetBlue2
  9200.     CMP    #79,D0
  9201.     BHS.S    SelectColor2
  9202. set2b2    BSR    GetColPos
  9203.     AND    #$000F,D2
  9204.     CMP.B    D2,D0
  9205.     BEQ.S    setbsk2
  9206.     AND    #$0FF0,D1
  9207.     OR    D0,D1
  9208.     MOVE    D1,(A0)
  9209.     BSR    ShowColSliders
  9210.     BSR    ShowRainbow
  9211.     BSR    SetupVUCols
  9212. setbsk2    BTST    #6,$BFE001
  9213.     BEQ.S    set2b2
  9214.     RTS
  9215.  
  9216. SelectColor2
  9217.     MOVEQ    #0,D7
  9218. setcolp    BTST    #6,$BFE001
  9219.     BNE.S    ChkSpread
  9220.     MOVE    ColorsMax(PC),D0
  9221.     MOVE    MouseY,D1
  9222.     CMP    D7,D1
  9223.     BEQ.S    setcolp
  9224.     MOVE    D1,D7
  9225.     CMP    #37,D1
  9226.     BHS.S    setcoly
  9227.     MOVEQ    #37,D1
  9228. setcoly    SUB    #37,D1
  9229.     CMP    D0,D1
  9230.     BLT.S    setcol2
  9231.     MOVE    D0,D1
  9232.     SUBQ    #1,D1
  9233. setcol2    MOVE    D1,RainbowPos
  9234.     BSR    ShowRainbow
  9235.     BSR    GetColPos
  9236.     MOVE.L    A0,UndoColAddr
  9237.     MOVE    D1,UndoCol
  9238.     BSR    ShowColSliders
  9239.     BRA    setcolp
  9240.  
  9241. ChkSpread
  9242.     TST    SpreadFlag
  9243.     BEQ    Return1
  9244.     CLR    SpreadFlag
  9245.     BSR    GetColPos
  9246.     MOVE    SpreadFrom,D0
  9247.     MOVE    RainbowPos,D1
  9248.     CMP    D1,D0
  9249.     BLO.S    chkspr2
  9250.     EXG    D0,D1
  9251. chkspr2    MOVE    D1,D4
  9252.     SUB    D0,D4
  9253.     CMP    #1,D4
  9254.     BLS    Return1
  9255.     MOVE.L    D4,A2
  9256.     ADD    D4,D4
  9257.     MOVE.L    TheRightColors(PC),A0
  9258.     MOVE.L    A0,A1
  9259.     ADD    D0,D0
  9260.     ADD    D1,D1
  9261.     LEA    (A0,D0.W),A0    ; 1st col
  9262.     MOVE    (A0),D2
  9263.     LEA    (A1,D1.W),A1
  9264.     MOVE    (A1),D3        ; 2nd col
  9265.     MOVEQ    #0,D5
  9266.  
  9267. sprdlop    MOVE    D2,D0 ; red
  9268.     LSR    #8,D0
  9269.     MOVE    D3,D1
  9270.     LSR    #8,D1
  9271.     BSR    ColCrossfade
  9272.     LSL    #8,D0
  9273.     MOVE    D0,D7
  9274.     MOVE    D2,D0 ; green
  9275.     LSR    #4,D0
  9276.     AND    #$000F,D0
  9277.     MOVE    D3,D1
  9278.     LSR    #4,D1
  9279.     AND    #$000F,D1
  9280.     BSR    ColCrossfade
  9281.     LSL    #4,D0
  9282.     OR    D0,D7
  9283.     MOVE    D2,D0 ; blue
  9284.     AND    #$000F,D0
  9285.     MOVE    D3,D1
  9286.     AND    #$000F,D1
  9287.     BSR    ColCrossfade
  9288.     OR    D0,D7
  9289.     ADDQ    #2,D5
  9290.     MOVE    D7,(A0)+
  9291.     CMP.L    A1,A0
  9292.     BLO    sprdlop
  9293.     BRA    rocoup2
  9294.  
  9295. ColCrossfade
  9296.     MOVE    D4,D6
  9297.     SUB    D5,D6
  9298.     MULU    D6,D0
  9299.     ADD.L    A2,D0
  9300.     MULU    D5,D1
  9301.     ADD    D1,D0
  9302.     DIVU    D4,D0
  9303.     CMP    #15,D0
  9304.     BLS    Return1
  9305.     MOVEQ    #15,D0
  9306.     RTS
  9307.  
  9308. ShowRainbow
  9309.     MOVE.L    TextBplPtr,A0
  9310.     LEA    1490(A0),A0
  9311.     MOVEQ    #0,D1
  9312.     MOVE.L    #$00FFE000,D2
  9313.     MOVE    RainbowPos,D3
  9314. rainlop    MOVE.L    D2,D0
  9315.     CMP    D3,D1
  9316.     BNE.S    rainsk1
  9317.     MOVE.L    #$1EFFEF00,D0
  9318. rainsk1    MOVE.L    D0,(A0)
  9319.     LEA    40(A0),A0
  9320.     ADDQ    #1,D1
  9321.     CMP    #48,D1
  9322.     BLO.S    rainlop
  9323.     LEA    CopListAnalyzer,A0
  9324.     MOVE.L    TheRightColors(PC),A1
  9325.     MOVE    #$5107,D0
  9326.     MOVEQ    #47,D1
  9327.     MOVEQ    #0,D2
  9328. rainlp2    MOVE    D0,(A0)+
  9329.     MOVE    #$FFFE,(A0)+
  9330.     MOVE    #$018E,(A0)+
  9331.     CMP    ColorsMax(PC),D2
  9332.     BLO.S    rainsk2
  9333.     CLR    (A0)+
  9334.     BRA.S    rainsk3
  9335. rainsk2    MOVE    (A1)+,(A0)+
  9336. rainsk3    ADD    #$0100,D0
  9337.     ADDQ    #1,D2
  9338.     DBF    D1,rainlp2
  9339.     MOVEQ    #63,D0
  9340. rainlp3    MOVE.L    #$01B80000,(A0)+
  9341.     DBF    D0,rainlp3
  9342.     RTS
  9343.  
  9344. RainbowPos    dc.w    0
  9345. TheRightColors    dc.l    0
  9346. ColorsMax    dc.w    48
  9347.  
  9348.  
  9349.  
  9350.  
  9351.  
  9352.  
  9353. ;---- PT Decompacter ----
  9354. ; A0...source packed screen        | A1...pointer to raw screen
  9355. ; D0...length of packed data
  9356. ;
  9357. Decompact
  9358.     MOVE.L    A0,CompPtr
  9359.     MOVE.L    D0,CompLen
  9360.     BSR.S    FreeDecompMem
  9361.     MOVE.L    CompPtr(PC),A0
  9362.     CMP.L    #'FORM',(A0)        ;if IFF doit else old pak format
  9363.     BEQ    DecompactIFF
  9364.     MOVE.L    (A0),D0
  9365.     MOVE.L    D0,DecompMemSize
  9366.     MOVEQ    #0,D1
  9367.     MOVE.L    4.W,A6
  9368.     JSR    LVOAllocMem(A6)
  9369.     MOVE.L    D0,DecompMemPtr
  9370.     BEQ    OutOfMemErr
  9371.     MOVE.L    D0,A1
  9372.     MOVE.L    CompPtr(PC),A0
  9373.     MOVE.L    CompLen(PC),D0
  9374.     ADDQ.L    #4,A0
  9375.     SUBQ.L    #4,D0
  9376. dcmloop    MOVE.B    (A0)+,D1
  9377.     CMP.B    #181,D1
  9378.     BEQ.S    DecodeIt
  9379.     MOVE.B    D1,(A1)+
  9380. decom2    SUBQ.L    #1,D0
  9381.     CMP.L    #0,D0
  9382.     BGT.S    dcmloop
  9383.     MOVE.L    DecompMemPtr,A1
  9384.     MOVEQ    #-1,D0
  9385.     RTS
  9386.  
  9387. DecodeIt
  9388.     MOVEQ    #0,D1
  9389.     MOVE.B    (A0)+,D1
  9390.     MOVE.B    (A0)+,D2
  9391. dcdloop    MOVE.B    D2,(A1)+
  9392.     DBF    D1,dcdloop
  9393.     SUBQ.L    #2,D0
  9394.     BRA.S    decom2
  9395.  
  9396. FreeDecompMem
  9397.     MOVE.L    DecompMemPtr,D0
  9398.     BEQ    .nomem
  9399.     MOVE.L    D0,A1
  9400.     MOVE.L    DecompMemSize,D0
  9401.     MOVE.L    4.W,A6
  9402.     JSR    LVOFreeMem(A6)
  9403.     CLR.L    DecompMemPtr
  9404. .nomem    RTS
  9405.  
  9406. CompPtr    dc.l    0
  9407. CompLen    dc.l    0
  9408.  
  9409. ; --- if crunched IFF then go 4 it!!
  9410.  
  9411. DecompactIFF
  9412.     MOVE.L    A0,pic_buf
  9413.     MOVEM.L    D0-7/A0-A6,-(SP)
  9414.     BSR    iff_search
  9415.     MOVEM.L    (SP)+,D0-7/A0-6
  9416.     MOVE    width_bytes(pc),D0
  9417.     MULU    height(pc),D0
  9418.     MULU    planes_num(pc),D0
  9419.     MOVE.L    D0,DecompMemSize
  9420.     MOVE.L    #$10000,D1
  9421.     MOVE.L    4.W,A6
  9422.     JSR    LVOAllocMem(A6)
  9423.     MOVE.L    D0,DecompMemPtr
  9424.     BEQ    OutOfMemErr
  9425.     MOVE.L    D0,bitplane        ;store where to decompact into
  9426.     BSR    colors_init
  9427.     BSR    unpacker
  9428.     MOVE.L    DecompMemPtr,A1
  9429.     MOVEQ    #-1,D0
  9430.     RTS
  9431.  
  9432. *-------------------------------------------------------------------*
  9433. ;   this de-packs an iff file into bitmap using pic_buf
  9434.  
  9435. doiff    bsr    iff_search
  9436.     bsr    colors_init
  9437.     bsr    unpacker
  9438.     rts
  9439.  
  9440. ********************** resulting output info..
  9441. width        dc.w    320        ;pixels
  9442. height        dc.w    200
  9443. modes        dc.l    $12345678
  9444. planes        dcb.l    6,0
  9445. bitplane    dc.l    $40000        ;start address of output bitmap
  9446. color_map    dcb.w    64,0
  9447.  
  9448. **********************
  9449. iff_search
  9450.     move.l    pic_buf(pc),a0        ;address of IFF file
  9451.     add.l    #4+8,a0
  9452.     move.l    a0,bmhd_chunk
  9453.     move.l    4(a0),d0
  9454.     add.l    d0,a0
  9455.     addq.l    #8,a0
  9456.     move.l    a0,cmap_chunk
  9457. iff_l1
  9458.     move.l    4(a0),d0
  9459.     add.l    d0,a0
  9460.     addq.l    #8,a0
  9461.     move.l    #"BODY",d1
  9462.     cmp.l    (a0),d1
  9463.     bne.s    iff_l1
  9464.     move.l    a0,body_chunk
  9465.     move.l    bmhd_chunk(pc),a2
  9466.     move.l    a2,a1
  9467.     add.l    #16,a1
  9468.     moveq    #0,d0
  9469.     move.b    (a1),d0
  9470.     cmp    #6,d0
  9471.     blt.s    iff_cont
  9472.     moveq    #6,d0
  9473. iff_cont
  9474.     move    d0,planes_num
  9475.     move.l    a2,a1
  9476.     add.l    #18,a1
  9477.     move.b    (a1),comp_flag
  9478.     move.l    a2,a1
  9479.     addq.l    #8,a1
  9480.     moveq    #0,d0
  9481.     move    (a1)+,d0
  9482.     move    d0,width
  9483.     moveq    #0,d3
  9484.     cmp    #640,d0
  9485.     blt.s    iff_cont3
  9486.     or.w    #$8000,d3
  9487. iff_cont3
  9488.     move    d0,d1
  9489.     and    #7,d1
  9490.     beq.s    iff_cont2
  9491.     or    #8,d0
  9492. iff_cont2
  9493.     lsr    #3,d0            ;divu #8,D0
  9494.     move    d0,width_bytes
  9495.     moveq    #0,d0
  9496.     move    (a1),d0
  9497.     move    d0,height
  9498.     cmp    #400,d0
  9499.     blt.s    iff_cont4
  9500.     or    #4,d3
  9501. iff_cont4
  9502.     move    d3,modes
  9503.     rts
  9504.  
  9505. ******** colors initialize ********
  9506. colors_init
  9507.     move.l    cmap_chunk(pc),a0
  9508.     addq.l    #8,a0
  9509.     lea    color_map(pc),a1
  9510.     moveq    #31,d7            ;number of colors!!
  9511. co_loop1
  9512.     moveq    #0,d0
  9513.     move.b    (a0)+,d0
  9514.     and.b    #$f0,d0
  9515.     lsl.w    #4,d0
  9516.     move.b    (a0)+,d0
  9517.     and.w     #$0ff0,d0
  9518.     moveq    #0,d1
  9519.     move.b    (a0)+,d1
  9520.     lsr.b    #4,d1
  9521.     and.b    #$0f,d1
  9522.     or.b    d1,d0
  9523.     move.w    d0,(a1)+
  9524.     dbf    d7,co_loop1
  9525.     rts
  9526.  
  9527. *****************************************************************
  9528. *­­­­­­­­­­­­         U N P A C K E R  (fast) ­­­­­­­­­­­­­­­­­­­
  9529. *****************************************************************
  9530. unpacker
  9531.     lea    planes(pc),a2
  9532.     moveq    #5,d7
  9533.     move.l    bitplane(pc),d6
  9534.     moveq    #0,d0
  9535.     move    width_bytes(pc),d0
  9536.     mulu    height(pc),d0
  9537. fillad    move.l    d6,(a2)+
  9538.     add.l    d0,d6
  9539.     dbf    d7,fillad
  9540.  
  9541.     lea    planes(pc),a2
  9542.     move.l    body_chunk(pc),a0
  9543.     lea    4(a0),a0
  9544.     move.l    (a0),d7
  9545.     move.l    a0,a3
  9546.     add.l    d7,a3
  9547.     lea    2(a3),a3
  9548.     lea    4(a0),a0
  9549.     move    planes_num(pc),d2    ;number of planes loop cntr
  9550. unp_loop    cmp.l    a3,a0
  9551.         bgt.s    unpacker-2
  9552.         moveq    #0,d3
  9553. pic_loop1    move.l    d3,d4
  9554.         lsl    #2,d4        ;mulu #4,d4
  9555.         move.l    (a2,d4.w),a5
  9556.         bsr.s    unpack_row
  9557.         move.l    a5,(a2,d4.w)
  9558.         addq    #1,d3        ;add 1 to plane count
  9559.         cmp    d2,d3        ;if hit max then stop end
  9560.         blt.s    pic_loop1
  9561.         move.l    bmhd_chunk(pc),a5
  9562.         and.b    #1,17(a5)
  9563.         beq.s    unp_loop
  9564.         lea    mask_dummy(pc),a5
  9565.         bsr.s    unpack_row
  9566.         bra.s    unp_loop
  9567. unpack_row    move.l    d2,-(sp)
  9568.         move    width_bytes(pc),d2
  9569. unp_loop1    cmp.l    a3,a0
  9570.         bgt.s    unpack_row_end
  9571.         tst    d2
  9572.         beq.s    unpack_row_end
  9573.         moveq    #0,d0
  9574.         tst    comp_flag
  9575.         bne.s    unp_comp
  9576.         move    width_bytes(pc),d0
  9577.         subq    #1,d0
  9578.         bra.s    unp_loop2
  9579.  
  9580. unp_comp    move.b    (a0)+,d0    ;copy it
  9581.         bmi.s    packed
  9582.         and    #$7f,d0
  9583. unp_loop2    sub    d0,d2
  9584.         subq    #1,d2
  9585. unp_loop2a    move.b    (a0)+,(a5)+
  9586.         dbf    d0,unp_loop2a
  9587.         bra.s    unp_loop1
  9588.  
  9589. packed        neg.b    d0        ;fill it
  9590.         and    #$7f,d0
  9591.         move.b    (a0)+,d1
  9592. unp_loop3    sub    d0,d2
  9593.         subq    #1,d2
  9594. unp_loop3a    move.b    d1,(a5)+
  9595.         dbf    d0,unp_loop3a
  9596.         bra.s    unp_loop1
  9597. unpack_row_end    move.l (sp)+,d2
  9598. unpack_end    rts
  9599.  
  9600. *------------- chunk-Data ---------------*
  9601. bmhd_chunk    dc.l 0            ;address of IFF file + 12
  9602. cmap_chunk    dc.l 0            ;address of Color MAP
  9603. body_chunk    dc.l 0            ;address of the packed BitMAP
  9604. planes_num    dc.l 0
  9605. comp_flag    dc.l 0
  9606. width_bytes    dc.w 0            ;width of screen   pixels/8
  9607. pic_buf        dc.l 0
  9608. mask_dummy    dcb.l     32,0
  9609.  
  9610.  
  9611.  
  9612. ;---- Position Insert/Delete Gadgets ----
  9613.  
  9614. PosInsDelGadgs
  9615.     MOVE    MouseY2,D0
  9616.     CMP    #11,D0
  9617.     BHS    .ret
  9618.     MOVE    MouseX2,D0
  9619.     CMP    #62,D0
  9620.     BHS    .ret
  9621.     CMP    #51,D0
  9622.     BHS.S    PosDelete
  9623.     CMP    #40,D0
  9624.     BHS.S    PosInsert
  9625. .ret    RTS
  9626.  
  9627. PosInsert
  9628.     MOVE.L    SongDataPtr,A0
  9629.     LEA    sd_pattpos(A0),A0
  9630.     ADD.L    #126,A0
  9631.     MOVEQ    #127,D0
  9632.     MOVE.L    CurrPos,D1
  9633.     AND.L    #127,D1
  9634. posinloop
  9635.     MOVE.B    (A0),1(A0)
  9636.     SUBQ.L    #1,A0
  9637.     SUBQ.L    #1,D0
  9638.     CMP.L    D1,D0
  9639.     BHI.S    posinloop
  9640.     MOVE.B    PatternNumber+3,1(A0)
  9641.     BSR    PositionUp
  9642.     CLR    UpOrDown
  9643.     BSR    SongLengthGadg
  9644.     BRA    WaitForButtonUp
  9645.  
  9646. PosDelete
  9647.     MOVE.L    SongDataPtr,A0
  9648.     LEA    sd_pattpos(A0),A0
  9649.     MOVE.L    CurrPos,D0
  9650.     AND.L    #127,D0
  9651.     ADD.L    D0,A0
  9652. posdeloop
  9653.     MOVE.B    1(A0),(A0)
  9654.     ADDQ.L    #1,A0
  9655.     ADDQ.L    #1,D0
  9656.     CMP.L    #127,D0
  9657.     BLS.S    posdeloop
  9658.     CLR.B    -1(A0)
  9659.     BSR    ShowPosition
  9660.     MOVE    #-1,UpOrDown
  9661.     BSR    SongLengthGadg
  9662.     BRA    WaitForButtonUp
  9663.  
  9664. ;---- Enter number gadg ----
  9665.  
  9666. EnterNumGadg
  9667.     MOVE    MouseY2,D1
  9668.     CMP    #11,D1
  9669.     BLO    EnterPosGadg
  9670.     CMP    #22,D1
  9671.     BLO    EnterPattGadg
  9672.     CMP    #33,D1
  9673.     BLO    EnterLenGadg
  9674.     RTS
  9675.  
  9676. EnterPosGadg
  9677.     CLR.B    RawKeyCode
  9678.     MOVE    #76,LineCurX
  9679.     MOVE    #10,LineCurY
  9680.     MOVE    #169,TextOffset
  9681.     BSR    GetDec3Dig
  9682.     TST    AbortDecFlag
  9683.     BNE    pogskip
  9684.     CMP    #127,D0
  9685.     BLS.S    eposgok
  9686.     MOVEQ    #127,D0
  9687. eposgok    MOVE.L    D0,CurrPos
  9688.     BRA    pogskip
  9689.  
  9690. EnterPattGadg
  9691.     CLR.B    RawKeyCode
  9692.     MOVE    #84,LineCurX
  9693.     MOVE    #21,LineCurY
  9694.     MOVE    #610,TextOffset
  9695.     BSR    GetDecByte
  9696.     TST    AbortDecFlag
  9697.     BNE    pogskip
  9698.     CMP.B    #63,D0
  9699.     BLS.S    epgok
  9700.     MOVEQ    #63,D0
  9701. epgok    MOVE.L    SongDataPtr,A0
  9702.     LEA    sd_pattpos(A0),A0
  9703.     ADD.L    CurrPos,A0
  9704.     MOVE.B    D0,(A0)
  9705.     BRA    pogskip
  9706.  
  9707. EnterLenGadg
  9708.     CLR.B    RawKeyCode
  9709.     MOVE    #76,LineCurX
  9710.     MOVE    #32,LineCurY
  9711.     MOVE    #1049,TextOffset
  9712.     BSR    GetDec3Dig
  9713.     TST    AbortDecFlag
  9714.     BNE    ShowSongLength
  9715.     CMP    #128,D0
  9716.     BLS.S    elengok
  9717.     MOVE.B    #128,D0
  9718. elengok    MOVE.L    SongDataPtr,A0
  9719.     LEA    sd_numofpatt(A0),A0
  9720.     MOVE.B    D0,(A0)
  9721.     BRA    ShowSongLength
  9722.  
  9723. GetDec3Dig
  9724.     MOVE    #1,AbortDecFlag
  9725.     BSR    StorePtrCol
  9726.     BSR    SetWaitPtrCol
  9727.     BSR    UpdateLineCurPos
  9728. gd3loop    BSR    GetKey0_9
  9729.     CMP    #68,D1
  9730.     BEQ.S    gd3exit
  9731.     CMP    #2,D1
  9732.     BHI.S    gd3loop
  9733.     MOVE    D1,D0
  9734.     MULU    #100,D0
  9735.     MOVE    D0,gd3temp
  9736.     BSR    ShowOneDigit
  9737.     ADDQ    #8,LineCurX
  9738.     BSR    UpdateLineCurPos
  9739.     BSR    GetKey0_9
  9740.     CMP.B    #68,D1
  9741.     BEQ.S    gd3exit
  9742.     MOVE    D1,D0
  9743.     MULU    #10,D0
  9744.     ADD    D0,gd3temp
  9745.     BSR    ShowOneDigit
  9746.     ADDQ    #8,LineCurX
  9747.     BSR    UpdateLineCurPos
  9748.     BSR    GetKey0_9
  9749.     CMP.B    #68,D1
  9750.     BEQ.S    gd3exit
  9751.     ADD    D1,gd3temp
  9752.     CLR    AbortDecFlag
  9753. gd3exit    CLR    LineCurX
  9754.     MOVE    #270,LineCurY
  9755.     BSR    UpdateLineCurPos
  9756.     BSR    RestorePtrCol
  9757.     MOVEQ    #0,D0
  9758.     MOVE    gd3temp(PC),D0
  9759.     RTS
  9760.  
  9761. gd3temp    dc.w    0
  9762.  
  9763. ;----  Up/Down Gadgets ----
  9764.  
  9765. DownGadgets
  9766.     MOVE    #1,UpdateFreeMem
  9767.     MOVE    #-1,UpOrDown
  9768.     BRA.S    ug2
  9769.  
  9770. UpGadgets
  9771.     MOVE    #1,UpdateFreeMem
  9772.     CLR    UpOrDown
  9773. ug2    MOVE    MouseY2,D0
  9774.             ;CMP    #100,D0     *** to ikky
  9775.             ;BHS    Return1
  9776.     CMP    #100,D0
  9777.     BLT.s    .not
  9778.         rts
  9779. .not    CMP    #89,D0
  9780.     BHS    RepLenGadg
  9781.     CMP    #78,D0
  9782.     BHS    RepeatGadg
  9783.     CMP    #67,D0
  9784.     BHS    SampleLengthGadg
  9785.     CMP    #56,D0
  9786.     BHS    VolumeGadg
  9787.     CMP    #45,D0
  9788.     BHS    SampleNumGadg
  9789.     CMP    #34,D0
  9790.     BHS    FineTuneGadg
  9791.     CMP    #23,D0
  9792.     BHS    SongLengthGadg
  9793.     CMP    #12,D0
  9794.     BHS    PatternGadg
  9795.     TST    MouseY2
  9796.     BHS.S    PositionGadg
  9797.     RTS
  9798.  
  9799. PositionGadg
  9800.     TST    UpOrDown
  9801.     BMI.S    PositionDown
  9802. PositionUp
  9803.     ADDQ.L    #1,CurrPos
  9804.     BTST    #2,$DFF016
  9805.     BNE.S    pogskp2
  9806.     ADD.L    #9,CurrPos
  9807. pogskp2    CMP.L    #127,CurrPos
  9808.     BLS.S    pogskip
  9809.     MOVE.L    #127,CurrPos
  9810. pogskip    MOVE.L    CurrPos,SongPosition
  9811.     BSR    ShowPosition
  9812.     JSR    Wait_4000
  9813.     JSR    Wait_4000
  9814.     JMP    Wait_4000
  9815.  
  9816. PositionDown
  9817.     SUBQ.L    #1,CurrPos
  9818.     BTST    #2,$DFF016
  9819.     BNE.S    pogskp3
  9820.     SUB.L    #9,CurrPos
  9821. pogskp3    TST.L    CurrPos
  9822.     BPL.S    pogskip
  9823.     CLR.L    CurrPos
  9824.     BRA.S    pogskip
  9825.  
  9826. PatternGadg
  9827.     MOVE.L    SongDataPtr,A0
  9828.     LEA    sd_pattpos(A0),A0
  9829.     TST    UpOrDown
  9830.     BMI.S    PatternDown
  9831. PatternUp
  9832.     ADD.L    CurrPos,A0
  9833.     ADDQ.B    #1,(A0)
  9834.     BTST    #2,$DFF016
  9835.     BNE.S    pagaskp
  9836.     ADD.B    #9,(A0)
  9837. pagaskp    CMP.B    #63,(A0)
  9838.     BLS.S    pogskip
  9839.     MOVE.B    #63,(A0)
  9840.     BRA.S    pogskip
  9841.  
  9842. PatternDown
  9843.     ADD.L    CurrPos,A0
  9844.     SUBQ.B    #1,(A0)
  9845.     BTST    #2,$DFF016
  9846.     BNE.S    padoskp
  9847.     SUB.B    #9,(A0)
  9848. padoskp    TST.B    (A0)
  9849.     BPL    pogskip
  9850.     CLR.B    (A0)
  9851.     BRA    pogskip
  9852.  
  9853.  
  9854. SongLengthGadg
  9855.     MOVE.L    SongDataPtr,A0
  9856.     LEA    sd_numofpatt(A0),A0
  9857.     TST    UpOrDown
  9858.     BMI.S    SongLengthDown
  9859. SongLengthUp
  9860.     ADDQ.B    #1,(A0)
  9861.     BTST    #2,$DFF016
  9862.     BNE.S    slupskp
  9863.     ADD.B    #9,(A0)
  9864. slupskp    CMP.B    #127,(A0)
  9865.     BMI.S    solgskip
  9866.     MOVE.B    #127,(A0)
  9867. solgskip
  9868.     BSR    ShowSongLength
  9869.     JSR    Wait_4000
  9870.     JSR    Wait_4000
  9871.     JMP    Wait_4000
  9872.  
  9873. SongLengthDown
  9874.     SUBQ.B    #1,(A0)
  9875.     BTST    #2,$DFF016
  9876.     BNE.S    sldoskp
  9877.     SUB.B    #9,(A0)
  9878. sldoskp    CMP.B    #1,(A0)
  9879.     BGE.S    solgskip
  9880.     MOVE.B    #1,(A0)
  9881.     BRA.S    solgskip
  9882.  
  9883.  
  9884. SampleNumGadg
  9885.     BTST    #2,$DFF016    ; Check Right Mousebutton
  9886.     BNE.S    SampleNum2
  9887.     TST    InsNum
  9888.     BEQ    ShowSampleInfo
  9889.     MOVE    InsNum,LastInsNum
  9890.     CLR    InsNum
  9891.     BRA    ShowSampleInfo
  9892.  
  9893. SampleNum2
  9894.     TST    UpOrDown
  9895.     BMI.S    SampleNumDown
  9896. SampleNumUp
  9897.     ADDQ    #1,InsNum
  9898.     CMP    #31,InsNum
  9899.     BMI.S    snuskip
  9900.     MOVE    #31,InsNum
  9901. snuskip    BSR    redrsam
  9902.     JSR    Wait_4000
  9903.     JMP    Wait_4000
  9904.  
  9905. SampleNumDown
  9906.     TST    InsNum
  9907.     BEQ.S    snuskip
  9908.     SUBQ    #1,InsNum
  9909.     CMP    #1,InsNum
  9910.     BPL.S    snuskip
  9911.     MOVE    #1,InsNum
  9912.     BRA.S    snuskip
  9913.  
  9914. FineTuneGadg
  9915.     MOVE.L    SongDataPtr,A0
  9916.     LEA    12(A0),A0
  9917.     MOVE    InsNum,D0
  9918.     BNE.s    .true
  9919.                 RTS
  9920. .true    MULU    #30,D0
  9921.     ADD.L    D0,A0
  9922.     BTST    #2,$DFF016
  9923.     BNE.S    ftgskip
  9924.     CLR.B    2(A0)
  9925.     BRA.S    ftuskip
  9926. ftgskip    TST    UpOrDown
  9927.     BMI.S    FineTuneDown
  9928. FineTuneUp
  9929.     AND.B    #$0F,2(A0)
  9930.     CMP.B    #7,2(A0)
  9931.     BEQ.S    ftuskip
  9932.     ADDQ.B    #1,2(A0)
  9933.     AND.B    #$0F,2(A0)
  9934. ftuskip    BSR    ShowSampleInfo
  9935.     JSR    Wait_4000
  9936.     JMP    Wait_4000
  9937.  
  9938. FineTuneDown
  9939.     AND.B    #$0F,2(A0)
  9940.     CMP.B    #8,2(A0)
  9941.     BEQ.S    ftuskip
  9942.     SUBQ.B    #1,2(A0)
  9943.     AND.B    #$0F,2(A0)
  9944.     BRA.S    ftuskip
  9945.  
  9946.  
  9947. VolumeGadg
  9948.     MOVE.L    SongDataPtr,A0
  9949.     LEA    12(A0),A0
  9950.     MOVE    InsNum,D0
  9951.     BNE.s    .notret
  9952.         rts
  9953. .notret    MULU    #30,D0
  9954.     ADD.L    D0,A0
  9955.     TST    UpOrDown
  9956.     BMI.S    VolumeDown
  9957. VolumeUp
  9958.     ADDQ.B    #1,3(A0)
  9959.     BTST    #2,$DFF016
  9960.     BNE.S    voupskp
  9961.     ADD.B    #15,3(A0)
  9962. voupskp    CMP.B    #$40,3(A0)
  9963.     BLS.S    ftuskip
  9964.     MOVE.B    #$40,3(A0)
  9965.     BRA.S    ftuskip
  9966.  
  9967. VolumeDown
  9968.     SUBQ.B    #1,3(A0)
  9969.     BTST    #2,$DFF016
  9970.     BNE.S    vodoskp
  9971.     SUB.B    #15,3(A0)
  9972. vodoskp    TST.B    3(A0)
  9973.     BPL    ftuskip
  9974.     CLR.B    3(A0)
  9975.     BRA    ftuskip
  9976.  
  9977. SampleLengthGadg
  9978.     MOVE    #1,SampleLengthFlag
  9979.     MOVE.L    SongDataPtr,A0
  9980.     LEA    12(A0),A0
  9981.     MOVEQ    #0,D0
  9982.     MOVE    InsNum,D0
  9983.     BEQ    ShowSampleInfo
  9984.     MULU    #30,D0
  9985.     ADD.L    D0,A0
  9986.     TST    UpOrDown
  9987.     BMI.S    SampleLengthDown
  9988. SampleLengthUp
  9989.     ADDQ    #1,(A0)
  9990.     BTST    #2,$DFF016
  9991.     BNE.S    sluskip
  9992.     CMP    #$7FF0,(A0)
  9993.     BHS.S    sluskip
  9994.     ADDQ    #7,(A0)
  9995. sluskip    CMP    #$7FFF,(A0)
  9996.     BLO    ShowSampleInfo
  9997.     MOVE    #$7FFF,(A0)
  9998.     BRA    ShowSampleInfo
  9999.  
  10000. SampleLengthDown
  10001.     MOVE    4(A0),D0
  10002.     ADD    6(A0),D0
  10003.     SUBQ    #1,(A0)
  10004.     BTST    #2,$DFF016
  10005.     BNE.S    sldskip
  10006.     SUBQ    #7,(A0)
  10007. sldskip    BMI.S    sldskip2
  10008.     CMP    (A0),D0
  10009.     BLS    ShowSampleInfo
  10010.     MOVE    D0,(A0)
  10011.     BRA    ShowSampleInfo
  10012. sldskip2
  10013.     CLR    (A0)
  10014.     BRA    ShowSampleInfo
  10015.  
  10016. SampleLengthFlag dc.w 0
  10017.  
  10018. CheckSampleLength
  10019.     TST    SampleLengthFlag
  10020.     BEQ    .Return
  10021.     CLR    SampleLengthFlag
  10022.     MOVEQ    #0,D0
  10023.     MOVE    InsNum,D0
  10024.     BEQ    .Return
  10025.     MOVE.L    SongDataPtr,A0
  10026.     LEA    12(A0),A0
  10027.     MOVE.L    D0,D1
  10028.     LSL    #2,D1
  10029.     MULU    #30,D0
  10030.     ADD.L    D0,A0
  10031.     LEA    SamplePtrs,A1
  10032.     LEA    (A1,D1.W),A1
  10033.     MOVE.L    A0,PlaySamPtr
  10034.     MOVE.L    A1,RealSamPtr
  10035.     MOVE.L    124(A1),D0
  10036.     LSR.L    #1,D0
  10037.     MOVE    (A0),D1
  10038.     CMP    D0,D1
  10039.     BHI.S    ItsTooMuch
  10040. .Return    RTS
  10041.  
  10042. ItsTooMuch
  10043.     LEA    AddWorkSpaceText(PC),A0
  10044.     BSR    AreYouSure
  10045.     BNE.S    RestoreLength
  10046.     BSR    TurnOffVoices
  10047.     MOVE.L    PlaySamPtr,A0
  10048.     MOVEQ    #0,D0
  10049.     MOVE    (A0),D0
  10050.     LSL.L    #1,D0
  10051.     MOVE.L    D0,SamAllocLen
  10052.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  10053.     MOVE.L    4.W,A6
  10054.     JSR    LVOAllocMem(A6)
  10055.     MOVE.L    D0,SamAllocPtr
  10056.     BEQ.S    RestoreLength
  10057.     MOVE.L    D0,A1
  10058.     MOVE.L    RealSamPtr,A0
  10059.     MOVE.L    (A0),D0
  10060.     BEQ.S    nosamth
  10061.     MOVE.L    D0,A2
  10062.     MOVE.L    124(A0),D1
  10063.     BEQ.S    nosamth
  10064.     SUBQ.L    #1,D1
  10065. cpsalop    MOVE.B    (A2)+,(A1)+
  10066.     DBF    D1,cpsalop
  10067.     MOVE.L    (A0),A1
  10068.     MOVE.L    124(A0),D0
  10069.     MOVE.L    4.W,A6
  10070.     JSR    LVOFreeMem(A6)
  10071. nosamth    MOVE.L    RealSamPtr,A0
  10072.     MOVE.L    SamAllocPtr,(A0)
  10073.     MOVE.L    SamAllocLen,124(A0)
  10074.     BSR    ShowSampleInfo
  10075.     BSR    RedrawSample
  10076.     BRA    WaitForButtonUp
  10077.  
  10078. RestoreLength
  10079.     MOVE.L    PlaySamPtr,A0
  10080.     MOVE.L    RealSamPtr,A1
  10081.     MOVE.L    124(A1),D0
  10082.     LSR.L    #1,D0
  10083.     MOVE    D0,(A0)
  10084.     BRA    ShowSampleInfo
  10085.  
  10086. AddWorkSpaceText dc.b 'add workspace ?',0
  10087. PlaySamPtr  dc.l 0
  10088. RealSamPtr  dc.l 0
  10089. SamAllocPtr dc.l 0
  10090. SamAllocLen dc.l 0
  10091.  
  10092. RepeatGadg
  10093.     MOVE.L    SongDataPtr,A0
  10094.     LEA    12(A0),A0
  10095.     MOVEQ    #0,D0
  10096.     MOVE    InsNum,D0
  10097.     BEQ    ShowSampleInfo
  10098.     MULU    #30,D0
  10099.     ADD.L    D0,A0
  10100.     TST    UpOrDown
  10101.     BMI.S    RepeatDown
  10102. RepeatUp
  10103.     ADDQ    #1,4(A0)
  10104.     BTST    #2,$DFF016
  10105.     BNE.S    ruskip
  10106.     ADDQ    #7,4(A0)
  10107. ruskip    MOVE    (A0),D0        ;   Length
  10108.     BEQ.S    ruskip2
  10109.     SUB    6(A0),D0    ; - RepLen
  10110.     CMP    4(A0),D0
  10111.     BHI.S    ruskip2
  10112.     MOVE    D0,4(A0)
  10113. ruskip2    BSR    ShowSampleInfo
  10114.     BSR    UpdateRepeats
  10115.     BRA    SetLoopSprites2
  10116.  
  10117. RepeatDown
  10118.     SUBQ    #1,4(A0)
  10119.     BTST    #2,$DFF016
  10120.     BNE.S    rdskip
  10121.     SUBQ    #7,4(A0)
  10122. rdskip    TST    4(A0)
  10123.     BPL.S    ruskip2
  10124.     CLR    4(A0)
  10125.     BRA.S    ruskip2
  10126.  
  10127.  
  10128. RepLenGadg
  10129.     MOVE.L    SongDataPtr,A0
  10130.     LEA    12(A0),A0
  10131.     MOVEQ    #0,D0
  10132.     MOVE    InsNum,D0
  10133.     BEQ    ShowSampleInfo
  10134.     MULU    #30,D0
  10135.     ADD.L    D0,A0
  10136.     TST    UpOrDown
  10137.     BMI.S    RepLenDown
  10138. RepLenUp
  10139.     ADDQ    #1,6(A0)
  10140.     BTST    #2,$DFF016    ; Check Right Mousebutton
  10141.     BNE.S    rluskip
  10142.     ADDQ    #7,6(A0)
  10143. rluskip    MOVE    (A0),D0
  10144.     BEQ.S    ruskip2
  10145.     SUB    4(A0),D0
  10146.     CMP    6(A0),D0
  10147.     BHI.S    ruskip2
  10148.     BRA.S    rldskip
  10149.  
  10150. RepLenDown
  10151.     MOVEQ    #0,D0
  10152.     MOVE    6(A0),D0
  10153.     SUBQ.L    #1,D0
  10154.     BTST    #2,$DFF016
  10155.     BNE.S    rldskip
  10156.     SUBQ.L    #7,D0
  10157. rldskip    CMP.L    #1,D0
  10158.     BGE.S    rldskp2
  10159.     MOVEQ    #1,D0
  10160. rldskp2    MOVE    D0,6(A0)
  10161.     BRA    ruskip2
  10162.  
  10163. UpdateRepeats
  10164.     LEA    audchan1temp,A1
  10165.     LEA    $DFF0A0,A2
  10166.     LEA    ScopeInfo,A3
  10167.     BSR.S    upre2
  10168.     LEA    audchan2temp,A1
  10169.     LEA    $DFF0B0,A2
  10170.     LEA    ScopeInfo+20,A3
  10171.     BSR.S    upre2
  10172.     LEA    audchan3temp,A1
  10173.     LEA    $DFF0C0,A2
  10174.     LEA    ScopeInfo+40,A3
  10175.     BSR.S    upre2
  10176.     LEA    audchan4temp,A1
  10177.     LEA    $DFF0D0,A2
  10178.     LEA    ScopeInfo+60,A3
  10179. upre2    MOVE    InsNum,D0
  10180.     CMP.B    n_samplenum(A1),D0
  10181.     BNE    Return1b
  10182.     MOVE.L    n_start(A1),A1
  10183.     MOVEQ    #0,D0
  10184.     MOVE    4(A0),D0    ; repeat
  10185.     ADD.L    D0,A1
  10186.     ADD.L    D0,A1
  10187.     MOVE.L    A1,(A2)
  10188.     MOVE    6(A0),D0
  10189.     MOVE    D0,4(A2)    ; replen
  10190.     MOVE.L    A1,ns_repeatptr(A3)
  10191.     ADD.L    D0,A1
  10192.     ADD.L    D0,A1
  10193.     MOVE.L    A1,ns_rependptr(A3)
  10194. Return1b
  10195.     RTS
  10196.  
  10197. SetPatternPos
  10198.     MOVE.L    PatternPosition,D0
  10199.     LSR.L    #4,D0
  10200.     BRA.S    ssppskip
  10201.  
  10202. SetScrPatternPos
  10203.     MOVE    ScrPattPos,D0
  10204. ssppskip
  10205.     TST    SamScrEnable
  10206.     BNE    Return1b
  10207.     MOVE    D0,PlayFromPos
  10208.     MULU    #7*40,D0
  10209.     MOVE.L    TextBplPtr,A0
  10210.     LEA    5560(A0),A0
  10211.     ADD.L    A0,D0
  10212.     MOVE.L    CopListBpl4Ptr,A1
  10213.     MOVE    D0,6(A1)
  10214.     SWAP    D0
  10215.     MOVE    D0,2(A1)
  10216.     RTS
  10217.  
  10218. PlayFromPos    dc.w 0
  10219.  
  10220. WantedPattGadg
  10221.     TST    SamScrEnable
  10222.     BNE    CheckSamGadgets
  10223. TypeInWantedPatt
  10224.     CMP    #138,D1
  10225.     BHI.S    .tiwp2
  10226.         CMP    #25,D0
  10227.         BHI    TempoGadg
  10228. .tiwp2    CMP    #25,d0
  10229.     BHS    twexit
  10230.     CMP.L    #'patp',RunMode    ; not if a song is playing... 
  10231.     BEQ    Return1b
  10232.     CLR.B    RawKeyCode
  10233.     MOVE    #12,LineCurX
  10234.     MOVE    #$0086,LineCurY
  10235.     MOVE    #5121,TextOffset
  10236.     BSR    GetDecByte
  10237.     TST    AbortDecFlag
  10238.     BNE.S    twexit
  10239.     MOVE.B    D0,PatternNumber+3
  10240.     CMP.L    #63,PatternNumber
  10241.     BLS.S    twexit
  10242.     MOVE.L    #63,PatternNumber
  10243. twexit    BRA    RedrawPattern
  10244.  
  10245.  
  10246.  
  10247. GetKey0_9
  10248.     BTST    #2,$DFF016
  10249.     BEQ.S    gk_ret
  10250.     MOVEQ    #0,D0
  10251.     BSR    DoKeyBuffer
  10252.     MOVE.B    RawKeyCode,D0
  10253.     BEQ.S    GetKey0_9
  10254.     CLR.B    RawKeyCode
  10255.     CMP.B    #68,D0
  10256.     BEQ.S    gk_ret
  10257.     CMP.B    #69,D0
  10258.     BEQ.S    gk_ret
  10259.     CMP.B    #10,D0
  10260.     BEQ.S    gk_end
  10261.     BHI.S    GetKey0_9
  10262.     CMP.B    #1,D0
  10263.     BLO.S    GetKey0_9
  10264.     MOVE.L    D0,D1
  10265.     RTS
  10266.  
  10267. gk_end    MOVEQ    #0,D1
  10268.     RTS
  10269.  
  10270. gk_ret    MOVEQ    #68,D1
  10271.     RTS
  10272.  
  10273. ShowOneDigit
  10274.     ADD.B    #'0',D1
  10275.     MOVE.B    D1,NumberText
  10276.     CLR    D1
  10277.     SWAP    D1
  10278.     MOVE    #1,TextLength
  10279.     MOVE.L    #NumberText,ShowTextPtr
  10280.     BSR    ShowText
  10281.     CLR.L    NumberText
  10282.     CLR    WordNumber
  10283.     RTS
  10284.  
  10285. ;---- Get Text Line ----
  10286.  
  10287. GetTextLine
  10288.     MOVEQ    #0,D0
  10289.     MOVE    A4,D0
  10290.     DIVU    #40,D0
  10291.     ADDQ    #5,D0
  10292.     MOVE    D0,LineCurY
  10293.     SWAP    D0
  10294.     LSL    #3,D0
  10295.     ADDQ    #4,D0
  10296.     MOVE    D0,LineCurX
  10297.     BSR    UpdateLineCurPos
  10298.     MOVE.L    ShowTextPtr,DSTPtr
  10299.     CLR.L    DSTOffset
  10300.     CLR.L    DSTPos
  10301.     MOVE    #1,GetLineFlag
  10302.     MOVE.L    A4,A5
  10303.     MOVE    LineCurX,D5
  10304.     CLR.B    RawKeyCode
  10305.     BSR    UpdateText
  10306. WaitForKey
  10307.     BTST    #2,$DFF016
  10308.     BEQ    AbortGetLine
  10309.     BTST    #6,$BFE001
  10310.     BEQ    LineClicked
  10311.     BSR    DoKeyBuffer
  10312.     MOVEQ    #0,D1
  10313.     MOVE.B    RawKeyCode,D1
  10314.     BEQ.S    WaitForKey
  10315.     CMP.B    #78,D1
  10316.     BEQ    MoveCharRight
  10317.     CMP.B    #79,D1
  10318.     BEQ    MoveCharLeft
  10319.     CMP.B    #70,D1
  10320.     BEQ    DeleteChar
  10321.     CMP.B    #65,D1
  10322.     BEQ    BackspaceChar
  10323.     CMP.B    #68,D1
  10324.     BEQ    GetLineReturn
  10325.     CMP.B    #69,D1
  10326.     BEQ    GetLineReturn
  10327.     BTST    #7,D1
  10328.     BNE.S    WaitForKey
  10329.     LEA    UnshiftedKeymap,A4
  10330.     TST    ShiftKeyStatus
  10331.     BEQ.S    gtlskip
  10332.     LEA    ShiftedKeymap,A4
  10333. gtlskip    AND    #$007F,D1
  10334.     CMP.B    #64,D1
  10335.     BHI.S    WaitForKey
  10336.     MOVE.B    (A4,D1.W),D1
  10337.     BEQ.S    WaitForKey
  10338.     TST.B    EnterTextFlag
  10339.     BEQ.S    TextLineKey
  10340.     CMP.B    #'0',D1
  10341.     BLO    WaitForKey
  10342.     CMP.B    #'f',D1
  10343.     BHI    WaitForKey
  10344.     CMP.B    #'a',D1
  10345.     BHS.S    TextLineKey
  10346.     CMP.B    #'9',D1
  10347.     BHI    WaitForKey
  10348. TextLineKey
  10349.     CMP.L    TextEndPtr,A6
  10350.     BEQ    WaitForKey
  10351.     MOVE.L    TextEndPtr,A4
  10352. tlkloop    MOVE.B    -(A4),1(A4)
  10353.     CMP.L    A4,A6
  10354.     BNE.S    tlkloop
  10355.     MOVE.L    TextEndPtr,A4
  10356.     CLR.B    (A4)
  10357.     MOVE.B    D1,(A6)+
  10358.     BSR    PosMoveRight
  10359.     BSR    UpdateText
  10360.     CLR.B    RawKeyCode
  10361.     BRA    WaitForKey
  10362.  
  10363. LineClicked
  10364.     MOVE    MouseY,D1
  10365.     SUB    LineCurY,D1
  10366.     CMP    #2,D1
  10367.     BGT    GetLineReturn
  10368.     CMP    #-8,D1
  10369.     BLT    GetLineReturn
  10370.     MOVE    MouseX,D1
  10371.     SUB    LineCurX,D1
  10372.     ADDQ    #4,D1
  10373.     ASR    #3,D1
  10374.     BEQ    WaitForKey
  10375.     BPL.S    linclri
  10376.  
  10377.     CMP.L    DSTPtr(PC),A6
  10378.     BEQ    WaitForKey
  10379.     SUBQ.L    #1,A6
  10380.     BSR    PosMoveLeft
  10381. upwake2    BSR    UpdateText
  10382.     BRA    WaitForKey
  10383.  
  10384. linclri    CMP.L    TextEndPtr,A6
  10385.     BEQ    WaitForKey
  10386.     TST.B    (A6)
  10387.     BEQ    WaitForKey
  10388.     ADDQ.L    #1,A6
  10389.     BSR    PosMoveRight
  10390.     BRA.S    upwake2
  10391.  
  10392. PosMoveRight
  10393.     MOVE.L    DSTPos,D0
  10394.     MOVEQ    #0,D1
  10395.     MOVE    TextLength,D1
  10396.     TST.B    EnterTextFlag
  10397.     BNE.S    pmrskip
  10398.     SUBQ    #1,D1
  10399. pmrskip    CMP.L    D1,D0
  10400.     BLO.S    posrok
  10401.     ADDQ.L    #1,DSTOffset
  10402.     BRA    UpdateLineCurPos
  10403. posrok    ADDQ.L    #1,DSTPos
  10404.     ADDQ    #8,LineCurX
  10405.     BRA    UpdateLineCurPos
  10406.  
  10407. PosMoveLeft
  10408.     TST.L    DSTPos
  10409.     BNE.S    poslok
  10410.     SUBQ.L    #1,DSTOffset
  10411.     BRA    UpdateLineCurPos
  10412. poslok    SUBQ.L    #1,DSTPos
  10413.     SUBQ    #8,LineCurX
  10414.     BRA    UpdateLineCurPos
  10415.  
  10416. BackspaceChar
  10417.     CMP.L    DSTPtr(PC),A6
  10418.     BEQ    WaitForKey
  10419.     SUBQ.L    #1,A6
  10420.     MOVE.L    A6,A4
  10421. dobaloop
  10422.     MOVE.B    1(A4),(A4)+
  10423.     CMP.L    TextEndPtr,A4
  10424.     BNE.S    dobaloop
  10425.     BSR    PosMoveLeft
  10426. upwake    BSR    UpdateText
  10427.     JSR    Wait_4000
  10428.     JSR    Wait_4000
  10429.     JSR    Wait_4000
  10430.     BRA    WaitForKey
  10431.  
  10432. DeleteChar
  10433.     MOVE.L    A6,A4
  10434. dechloop
  10435.     MOVE.B    1(A4),(A4)+
  10436.     CMP.L    TextEndPtr,A4
  10437.     BLO.S    dechloop
  10438.     BRA.S    upwake
  10439.  
  10440. MoveCharRight
  10441.     CMP.L    TextEndPtr,A6
  10442.     BEQ    WaitForKey
  10443.     TST.B    (A6)
  10444.     BEQ    WaitForKey
  10445.     ADDQ.L    #1,A6
  10446.     BSR    PosMoveRight
  10447.     BRA.S    upwake
  10448.  
  10449. MoveCharLeft
  10450.     CMP.L    DSTPtr(PC),A6
  10451.     BEQ    WaitForKey
  10452.     SUBQ.L    #1,A6
  10453.     BSR    PosMoveLeft
  10454.     BRA.S    upwake
  10455.  
  10456. GetLineReturn
  10457.     MOVE.L    DSTPtr,A6
  10458.     CMP.B    #1,EnterTextFlag
  10459.     BNE.S    gtl_rskip
  10460.     TST.B    DiskNumText2
  10461.     BEQ    WaitForKey
  10462. gtl_rskip
  10463.     CMP.B    #3,EnterTextFlag
  10464.     BNE.S    gtl_rskip2
  10465.     TST.B    SndDiskNum1
  10466.     BEQ    WaitForKey
  10467. gtl_rskip2
  10468.     MOVE.L    A6,A4
  10469. dlrloop    TST.B    (A4)+
  10470.     BNE.S    dlrloop
  10471.     SUBQ.L    #1,A4
  10472. dlrloop2
  10473.     CMP.L    TextEndPtr,A4
  10474.     BHS.S    dlrexit
  10475.     CLR.B    (A4)+
  10476.     BRA.S    dlrloop2
  10477.  
  10478. dlrexit    CLR    LineCurX
  10479.     MOVE    #270,LineCurY
  10480.     BSR    UpdateLineCurPos
  10481.     CLR    GetLineFlag
  10482.     MOVE.B    RawKeyCode,MixChar
  10483.     CLR.B    RawKeyCode
  10484.     CLR.L    DSTOffset
  10485.     BSR.S    UpdateText
  10486.     BRA    WaitForButtonUp
  10487.  
  10488. AbortGetLine
  10489.     MOVE.L    DSTPtr,A6
  10490.     MOVE.L    A6,A4
  10491. clliloop
  10492.     CLR.B    (A4)+
  10493.     CMP.L    TextEndPtr,A4
  10494.     BNE.S    clliloop
  10495.     BSR.S    UpdateText
  10496.     BRA    GetLineReturn
  10497.  
  10498. UpdateText
  10499.     MOVE    A5,TextOffset
  10500.     MOVE.L    DSTPtr,A0
  10501.     ADD.L    DSTOffset,A0
  10502.     BRA    ShowText2
  10503.  
  10504. DSTPtr        dc.l    0
  10505. DSTPos        dc.l    0
  10506. DSTOffset    dc.l    0
  10507.  
  10508. ;----
  10509.  
  10510. TypeInSongName
  10511.     BSR    StorePtrCol
  10512.     BSR    SetWaitPtrCol
  10513.     CLR.L    EditMode
  10514.     MOVE.L    SongDataPtr,A6
  10515.     MOVE.L    A6,TextEndPtr
  10516.     MOVE.L    A6,ShowTextPtr
  10517.     ADD.L    #19,TextEndPtr
  10518.     MOVE    #20,TextLength
  10519.     MOVE    #4133,A4
  10520.     BSR    GetTextLine
  10521.     CLR.L    TextEndPtr
  10522.     BRA    RestorePtrCol
  10523.  
  10524. CheckSmplNamOrLoad
  10525.     CMP    #287,MouseX2
  10526.     BHS    LoadNamedSample
  10527. TypeInSampleName
  10528.     BSR    StorePtrCol
  10529.     BSR    SetWaitPtrCol
  10530.     CLR.L    EditMode
  10531.     MOVE.L    SongDataPtr,A6
  10532.     LEA    -10(A6),A6
  10533.     MOVE    InsNum,D7
  10534.     BNE.S    tisnskip
  10535.     MOVE    LastInsNum,D7
  10536. tisnskip
  10537.     MULU    #30,D7
  10538.     ADD.L    D7,A6
  10539.     MOVE.L    A6,TextEndPtr
  10540.     MOVE.L    A6,ShowTextPtr
  10541.     ADD.L    #21,TextEndPtr
  10542.     MOVE    #22,TextLength
  10543.     MOVE    #4573,A4
  10544.     BSR    GetTextLine
  10545.     CLR.L    TextEndPtr
  10546.     BRA    RestorePtrCol
  10547.  
  10548. LoadSample
  10549.     TST    InsNum
  10550.     BEQ    NotSampleNull
  10551.     BSR    StorePtrCol
  10552.     LEA    SamplePath2,A0
  10553.     BSR    CopyPath
  10554.     LEA    DirInputName,A0
  10555.     MOVEQ    #DirNameLength-1,D0
  10556. lsloop    MOVE.B    (A0)+,(A1)+
  10557.     DBF    D0,lsloop
  10558.     MOVE.L    SongDataPtr,A0
  10559.     MOVE    InsNum,D0
  10560.     MULU    #30,D0
  10561.     LEA    -10(A0),A0
  10562.     ADD.L    D0,A0
  10563.     LEA    DirInputName,A1
  10564.     MOVEQ    #21,D0
  10565. lsloop2    MOVE.B    (A1)+,(A0)+
  10566.     DBF    D0,lsloop2
  10567.     BSR    SetDiskPtrCol
  10568.     MOVE.L    #FileName,D1
  10569.     BSR    ExamineAndAlloc
  10570.     BEQ    ErrorRestoreCol
  10571.     MOVE.L    #FileName,D1
  10572.     BRA    lnssec2
  10573.  
  10574. CheckForIFF2 ; load loop        ;load IFF sample!!!
  10575.     MOVEQ    #-1,D2
  10576.     BRA.S    ciff2
  10577. CheckForIFF
  10578.     MOVEQ    #0,D2
  10579. ciff2    MOVEQ    #0,D1
  10580.     CMP.L    #'FORM',(A0)
  10581.     BNE.S    wiskip
  10582.     CMP.L    #'8SVX',8(A0)
  10583.     BNE.S    wiskip
  10584.     MOVE.L    A0,A2
  10585.     MOVE.L    A1,D0
  10586.     ADD.L    A0,A1
  10587.     TST.L    D2
  10588.     BEQ.S    cfiloop
  10589.     BSR.S    CheckIFFLoop
  10590. cfiloop    CMP.L    #'BODY',(A0)
  10591.     BEQ.S    wasIFF
  10592.     ADDQ.L    #2,A0
  10593.     CMP.L    A1,A0
  10594.     BLS.S    cfiloop
  10595.     RTS
  10596.  
  10597. wasIFF    ADDQ.L    #8,A0
  10598.     ADD.L    A2,D0
  10599.     SUB.L    A0,D0
  10600. wiloop    MOVE.B    (A0)+,(A2)+
  10601.     CMP.L    A1,A0
  10602.     BLS.S    wiloop
  10603.     MOVE.L    SampleInstrSave(PC),A3
  10604.     LSR    #1,D0
  10605.     MOVE    22(A3),D1
  10606.     SUB    D0,D1
  10607.     MOVE    D0,22(A3)
  10608. wiskip    LEA    SampleLengthAdd(PC),A3
  10609.     MOVE    InsNum,D0
  10610.     LSL    #1,D0
  10611.     MOVE    D1,(A3,D0.W)
  10612.     RTS
  10613.  
  10614. CheckIFFLoop
  10615.     TST.B    IFFLoopFlag
  10616.     BEQ    Return2
  10617.     MOVEM.L    A0/D0,-(SP)
  10618. cilloop    CMP.L    #'VHDR',(A0)
  10619.     BEQ.S    wasvhdr
  10620.     ADDQ.L    #2,A0
  10621.     CMP.L    A1,A0
  10622.     BLS.S    cilloop
  10623. cilend    MOVEM.L    (SP)+,A0/D0
  10624.     RTS
  10625.  
  10626. wasvhdr    MOVE.L    SampleInstrSave(PC),A3
  10627.     MOVE.L    12(A0),D0
  10628.     BEQ.S    cilend
  10629.     LSR    #1,D0
  10630.     MOVE    D0,28(A3)
  10631.     MOVE.L    8(A0),D0
  10632.     BNE.S    wsvhdr2
  10633.     MOVEQ    #2,D0
  10634. wsvhdr2    LSR    #1,D0
  10635.     MOVE    D0,26(A3)
  10636.     BRA.S    cilend
  10637.  
  10638.  
  10639. SampleInstrSave    dc.l    0
  10640. SampleLengthAdd    dcb.w    32,0
  10641.  
  10642. ExamineAndAlloc
  10643.     MOVEQ    #-2,D2
  10644.     MOVE.L    DOSBase,A6
  10645.     JSR    LVOLock(A6)
  10646.     MOVE.L    D0,FileLock
  10647.     BEQ    CantFindFile
  10648.     MOVE.L    D0,D1
  10649.     MOVE.L    #FileInfoBlock,D2
  10650.     JSR    LVOExamine(A6)
  10651.     TST.L    FIB_EntryType
  10652.     BPL    CantExamFile
  10653.     MOVE.L    FileLock,D1
  10654.     JSR    LVOUnLock(A6)
  10655.     MOVE.L    FIB_FileSize,D0
  10656.     BEQ    FileIsEmpty
  10657.     BSR    TurnOffVoices
  10658.     BSR    FreeSample
  10659.     MOVE.L    FIB_FileSize,D0
  10660.     CMP.L    #$FFFE,D0
  10661.     BLS.S    exalloc
  10662.     MOVE.L    #$FFFE,D0
  10663. exalloc    LEA    SamplePtrs,A4
  10664.     MOVE    InsNum,D1
  10665.     LSL    #2,D1
  10666.     ADD    D1,A4
  10667.     MOVE.L    D0,124(A4)
  10668.     MOVE.L    D0,DiskDataLength
  10669.     MOVE.L    4.W,A6
  10670.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  10671.     JSR    LVOAllocMem(A6)
  10672.     MOVE.L    D0,DiskDataPtr
  10673.     MOVE.L    D0,(A4)
  10674.     BEQ    OutOfMemErr
  10675.     LEA    LoadingSampleText(PC),A0
  10676.     BSR    ShowStatusText
  10677.     MOVE.L    SongDataPtr,A0
  10678.     MOVE    InsNum,D0
  10679.     MULU    #30,D0
  10680.     LEA    -10(A0),A0
  10681.     ADD.L    D0,A0
  10682.     MOVE.L    A0,SampleInstrSave
  10683.     MOVE.L    DiskDataLength,D0
  10684.     LSR.L    #1,D0
  10685.     MOVE    D0,22(A0)
  10686.     MOVE.L    #$400000,24(A0)
  10687.     MOVE    #1,28(A0)
  10688.     BSR    ShowSampleInfo
  10689.     MOVEQ    #-1,D0
  10690.     RTS
  10691.  
  10692. LoadNamedSample
  10693.     TST    InsNum
  10694.     BEQ    NotSampleNull
  10695.     BSR    StorePtrCol
  10696.     BSR    CreateSampleName
  10697.     BSR    SetDiskPtrCol
  10698.     MOVE.L    FileNamePtr,D1
  10699.     BSR    ExamineAndAlloc
  10700.     BEQ    Return2
  10701.     MOVE.L    FileNamePtr,D1
  10702. lnssec2    MOVE.L    DOSBase(PC),A6
  10703.     MOVE.L    #1005,D2
  10704.     JSR    LVOOpen(A6)
  10705.     MOVE.L    D0,D7
  10706.     BEQ    CantOpenFile
  10707.     MOVE.L    D0,D1
  10708.     MOVE.L    DiskDataPtr,D2
  10709.     MOVE.L    DiskDataLength,D3
  10710.     JSR    LVORead(A6)
  10711.     MOVE.L    D7,D1
  10712.     JSR    LVOClose(A6)
  10713.     MOVE.L    DiskDataPtr,A0
  10714.     MOVE.L    DiskDataLength,A1
  10715.     BSR    CheckForIFF2
  10716.     BSR    ValidateLoops
  10717.     BSR    ShowSampleInfo
  10718.     MOVE.L    DiskDataPtr,A0
  10719.     CLR    (A0)
  10720.     BSR    RedrawSample
  10721.     CLR.L    SavSamInf
  10722.     BSR    ShowAllRight
  10723.     BRA    RestorePtrCol
  10724.  
  10725. CreateSampleName
  10726.     LEA    SampleFileName,A0
  10727.     MOVEQ    #27,D0
  10728. csnloop    CLR.B    (A0)+
  10729.     DBF    D0,csnloop
  10730.     MOVE.L    SongDataPtr,A0
  10731.     MOVE    InsNum,D0
  10732.     MULU    #30,D0
  10733.     LEA    -10(A0),A0
  10734.     ADD.L    D0,A0
  10735.     MOVE.L    A0,SampleInstrSave
  10736.     MOVEQ    #0,D0
  10737.     MOVE    22(A0),D0
  10738.     ADD.L    D0,D0
  10739.     MOVE.L    D0,DiskDataLength
  10740.     MOVE.L    D0,IFFBODY+4
  10741.     ADD.L    #IFFEND-IFFFORM-8,D0
  10742.     MOVE.L    D0,IFFFORM+4
  10743.  
  10744.     MOVEQ    #0,D0
  10745.     MOVE    22(A0),D0
  10746.     ADD.L    D0,D0
  10747.     MOVEQ    #0,D1
  10748.     MOVE    28(A0),D1
  10749.     CMP    #1,D1
  10750.     BLS.S    csnskp2
  10751.     ADD.L    D1,D1
  10752.     MOVEQ    #0,D0
  10753.     MOVE    26(A0),D0
  10754.     ADD.L    D0,D0
  10755.     BRA.S    csnskp3
  10756. csnskp2    MOVEQ    #0,D1
  10757. csnskp3    MOVE.L    D0,IFFVHDR+8
  10758.     MOVE.L    D1,IFFVHDR+12
  10759.  
  10760.     LEA    SampleFileName,A1
  10761.     LEA    IFFNAME+8,A2
  10762.     MOVEQ    #21,D0
  10763. csnloop2
  10764.     MOVE.B    (A0),(A1)+
  10765.     MOVE.B    (A0)+,(A2)+
  10766.     DBF    D0,csnloop2
  10767.     MOVE.L    #SampleFileName,D1
  10768.     MOVE.L    D1,FileNamePtr
  10769.     BSR.S    FindColon
  10770.     BEQ.S    CheckOverride
  10771.     LEA    SamplePath2,A0
  10772.     BSR    CopyPath
  10773.     MOVE.L    #SampleFileName,A0
  10774. csnloop3
  10775.     MOVE.B    (A0)+,(A1)+
  10776.     BNE.S    csnloop3
  10777.     MOVE.L    #FileName,FileNamePtr
  10778.     RTS
  10779.  
  10780. FindColon
  10781.     MOVE.L    D1,A0
  10782. fcloop    MOVE.B    (A0)+,D0
  10783.     BEQ.S    FindColonFail
  10784.     CMP.B    #':',D0
  10785.     BEQ.S    FindColonSuccess
  10786.     BRA.S    fcloop
  10787.  
  10788. FindColonFail
  10789.     MOVEQ    #-1,D0
  10790.     RTS
  10791.  
  10792. FindColonSuccess
  10793.     MOVEQ    #0,D0
  10794.     RTS
  10795.  
  10796. CheckOverride
  10797.     TST.B    OverrideFlag
  10798.     BEQ    Return2
  10799.     MOVE.L    #SampleFileName,A0
  10800.     MOVE.L    A0,A1
  10801.     LEA    21(A1),A1
  10802.     MOVE.L    A1,A2
  10803. chkovlp    MOVE.B    -(A1),D0
  10804.     CMP.B    #':',D0
  10805.     BEQ.S    chkovok
  10806.     CMP.B    #'/',D0
  10807.     BEQ.S    chkovok
  10808.     MOVE.L    A1,A2
  10809.     CMP.L    A0,A1
  10810.     BHI.S    chkovlp
  10811. chkovok    LEA    SamplePath2,A0
  10812.     BSR    CopyPath
  10813. chkovl2    MOVE.B    (A2)+,(A1)+
  10814.     BNE.S    chkovl2
  10815.     MOVE.L    #FileName,FileNamePtr
  10816.     RTS
  10817.  
  10818. ValidateLoops
  10819.     MOVE.L    SongDataPtr,A0
  10820.     LEA    20(A0),A0
  10821.     MOVEQ    #30,D0
  10822. valolop    MOVE    22(A0),D1
  10823.     MOVE    26(A0),D2
  10824.     MOVE    28(A0),D3
  10825.     CMP    D1,D2
  10826.     BHS.S    valosk1
  10827.     ADD    D2,D3
  10828.     CMP    D1,D3
  10829.     BHI.S    valosk2
  10830. valoque    TST    28(A0)
  10831.     BNE.S    valosk3
  10832.     MOVE    #1,28(A0)
  10833. valosk3    LEA    30(A0),A0
  10834.     DBF    D0,valolop
  10835.     RTS
  10836. valosk2    SUB    D2,D1
  10837.     MOVE    D1,28(A0)
  10838.     BRA.S    valoque
  10839. valosk1    MOVEQ    #1,D1
  10840.     MOVE.L    D1,26(A0)
  10841.     BRA.S    valoque
  10842.  
  10843.  
  10844.  
  10845. ;--- preset selection
  10846.  
  10847. UsePreset
  10848.     BSR    StorePtrCol
  10849.     TST.L    PLSTmem
  10850.     BEQ.S    upend
  10851.     TST    InsNum
  10852.     BEQ.S    upend
  10853.     CLR.B    RawKeyCode
  10854.     MOVE    CurrentPreset,D0
  10855.     SUBQ    #1,D0
  10856.     MULU    #30,D0
  10857.     MOVE.L    PLSTmem,A0
  10858.     ADD.L    D0,A0
  10859.     MOVE    InsNum,D0
  10860.     MULU    #30,D0
  10861.     MOVE.L    SongDataPtr,A1
  10862.     LEA    -10(A1,D0.W),A1
  10863.     MOVE.L    A1,A2
  10864.     MOVE.L    A1,TempInsPtr
  10865.     MOVEQ    #29,D0
  10866.     LEA    TempIns,A2
  10867. uploop    MOVE.B    (A1),(A2)+
  10868.     MOVE.B    (A0)+,(A1)+
  10869.     DBF    D0,uploop
  10870.     MOVE.L    (A2),D0
  10871.     AND.L    #$DFDFFFFF,D0
  10872.     CMP.L    #$53540000,D0 ;ST__
  10873.     BNE.S    upok
  10874.     CLR    (A2)
  10875.     CLR.L    22(A2)
  10876.     MOVE.L    #1,26(A2)
  10877. upok    BSR    LoadPreset
  10878. upend    BSR    ShowSampleInfo
  10879.     BRA    RestorePtrCol
  10880.  
  10881. LoadPreset
  10882.     BSR    LoadNamedSample
  10883.     BEQ    LdError
  10884.     MOVE    #1,UpdateFreeMem
  10885.     RTS
  10886.  
  10887. LdError
  10888.     MOVE.L    TempInsPtr(PC),A1
  10889.     LEA    TempIns,A2
  10890.     MOVEQ    #29,D0
  10891. .loop    MOVE.B    (A2)+,(A1)+
  10892.     DBF    D0,.loop
  10893.     MOVEQ    #0,D0
  10894.     RTS
  10895.  
  10896. TempInsPtr    dc.l    0
  10897. TempIns        dc.b    32,0
  10898.  
  10899.  
  10900.  
  10901. AllocSample
  10902.     MOVE.L    D0,-(SP)
  10903.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  10904.     MOVE.L    4.W,A6
  10905.     JSR    LVOAllocMem(A6)
  10906.     MOVE.L    D0,DiskDataPtr
  10907.     LEA    SamplePtrs,A0
  10908.     MOVE    InsNum(PC),D1
  10909.     LSL    #2,D1
  10910.     LEA    (A0,D1.W),A0
  10911.     MOVE.L    DiskDataPtr,(A0)
  10912.     MOVE.L    (SP)+,124(A0)
  10913.     RTS
  10914.  
  10915. FreeSample
  10916.     LEA    SamplePtrs,A0
  10917.     MOVE    InsNum(PC),D0
  10918.     BEQ    Return2
  10919.     LSL    #2,D0
  10920.     LEA    (A0,D0.W),A0
  10921.     MOVE.L    (A0),D1
  10922.     BEQ    Return2
  10923.     CLR.L    (A0)
  10924.     MOVE.L    124(A0),D0
  10925.     CLR.L    124(A0)
  10926.     MOVE.L    D1,A1
  10927.     MOVE.L    4.W,A6
  10928.     JSR    LVOFreeMem(A6)
  10929.     RTS
  10930.  
  10931. NotSampleNull
  10932.     LEA    NotSample0Text(PC),A0
  10933.     BSR    ShowStatusText
  10934.     BRA    SetErrorPtrCol
  10935.  
  10936. NotSample0Text    dc.b 'not sample 0 !',0,0
  10937.  
  10938. ;----
  10939.  
  10940. DeleteSong
  10941.     LEA    DeleteSongText,A0
  10942.     BSR    AreYouSure
  10943.     BNE    Return2
  10944.     LEA    DeletingSongText(PC),A0
  10945.     BSR    ShowStatusText
  10946.     LEA    SongsPath2,A0
  10947.     BSR    CopyPath
  10948.     LEA    DirInputName,A0
  10949.     MOVEQ    #DirNameLength-1,D0
  10950. dsloop    MOVE.B    (A0)+,(A1)+
  10951.     DBF    D0,dsloop
  10952.     MOVE    #1,Action
  10953. Delete3    MOVE.L    #FileName,FileNamePtr
  10954.     MOVE.L    DOSBase(PC),A6
  10955.     MOVE.L    FileNamePtr(PC),D1
  10956.     MOVE.L    D1,A0
  10957.     JSR    LVODeleteFile(A6)
  10958.     BSR    ClearFileNames
  10959.     BSR    ShowAllRight
  10960.     BSR    SetNormalPtrCol
  10961.     BSR    StorePtrCol
  10962.     BRA    DoAutoDir
  10963.  
  10964. DeleteModule
  10965.     LEA    DeleteModuleText,A0
  10966.     BSR    AreYouSure
  10967.     BNE    Return2
  10968.     LEA    DeletingModuleText(PC),A0
  10969.     BSR    ShowStatusText
  10970.     LEA    ModulesPath2,A0
  10971.     BSR    CopyPath
  10972.     LEA    DirInputName,A0
  10973.     MOVEQ    #DirNameLength-1,D0
  10974. dmdloop    MOVE.B    (A0)+,(A1)+
  10975.     DBF    D0,dmdloop
  10976.     MOVE    #3,Action
  10977.     BRA.S    Delete3
  10978.  
  10979. DeleteSample
  10980.     LEA    DeleteSampleText,A0
  10981.     BSR    AreYouSure
  10982.     BNE    Return2
  10983.     LEA    DeletingSampleText(PC),A0
  10984.     BSR    ShowStatusText
  10985.     LEA    SamplePath2,A0
  10986.     BSR    CopyPath
  10987.     LEA    DirInputName,A0
  10988.     MOVEQ    #DirNameLength-1,D0
  10989. dsaloop    MOVE.B    (A0)+,(A1)+
  10990.     DBF    D0,dsaloop
  10991.     MOVE    #5,Action
  10992.     BRA    Delete3
  10993.  
  10994. RenameFile
  10995.     LEA    RenamingFileText(PC),A0
  10996.     BSR    ShowStatusText
  10997.     LEA    DirInputName,A0
  10998.     LEA    NewInputName,A1
  10999.     MOVEQ    #23,D0
  11000. rnfloop    MOVE.B    (A0)+,(A1)+
  11001.     BNE.S    rnfskip
  11002.     SUBQ.L    #1,A0
  11003. rnfskip    DBF    D0,rnfloop
  11004.     BSR    StorePtrCol
  11005.     BSR    SetWaitPtrCol
  11006.     LEA    NewInputName,A6
  11007.     MOVE.L    A6,ShowTextPtr
  11008.     MOVE.L    A6,TextEndPtr
  11009.     ADD.L    #23,TextEndPtr
  11010.     MOVE    #24,TextLength
  11011.     MOVE    FileNameScrollPos+2,D0
  11012.     MULU    #240,D0
  11013.     MOVE    #1888,A4
  11014.     ADD    D0,A4
  11015.     BSR    GetTextLine
  11016.     TST.B    NewInputName
  11017.     BEQ.S    rnfend
  11018.     CMP.B    #69,MixChar
  11019.     BEQ.S    rnfend
  11020.  
  11021.     MOVE.L    PathPtr,A0
  11022.     BSR    CopyPath
  11023.     LEA    NewInputName,A0
  11024.     MOVEQ    #23,D0
  11025. rnfloop2
  11026.     MOVE.B    (A0)+,(A1)+
  11027.     DBF    D0,rnfloop2
  11028.  
  11029.     LEA    FileName,A0
  11030.     LEA    NewFileName,A1
  11031. rnfloop3
  11032.     MOVE.B    (A0)+,(A1)+
  11033.     BNE.S    rnfloop3
  11034.  
  11035.     MOVE.L    PathPtr,A0
  11036.     BSR    CopyPath
  11037.     LEA    DirInputName,A0
  11038.     MOVEQ    #DirNameLength-1,D0
  11039. rnfloop4
  11040.     MOVE.B    (A0)+,(A1)+
  11041.     DBF    D0,rnfloop4
  11042.  
  11043.     MOVE.L    #FileName,D1
  11044.     MOVE.L    #NewFileName,D2
  11045.     MOVE.L    DOSBase(PC),A6
  11046.     JSR    LVORename(A6)
  11047.  
  11048. rnfend    BSR    ClearFileNames
  11049.     CLR    Action
  11050.     BSR    RestorePtrCol
  11051.     BRA    ShowAllRight
  11052.  
  11053. LoadSong
  11054.     MOVE    #1,LoadInProgress
  11055.     BSR    DoClearSong
  11056.     BSR    ClrSampleInfo
  11057.     LEA    SongsPath2,A0
  11058.     BSR    CopyPath
  11059.     LEA    DirInputName,A0
  11060.     MOVEQ    #DirNameLength-1,D0
  11061. losoloop2
  11062.     MOVE.B    (A0)+,(A1)+
  11063.     DBF    D0,losoloop2
  11064.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  11065.     MOVE.L    #FileName,FileNamePtr
  11066.     MOVE.L    #70716,DiskDataLength
  11067.     LEA    LoadingSongText(PC),A0
  11068.     BSR    ShowStatusText
  11069.     BSR    DoLoadData
  11070.     BEQ    lososkip3
  11071.     MOVE.L    SongDataPtr(PC),A0
  11072.     CMP.L    #'PACK',(A0)
  11073.     BNE.S    lososkip
  11074.     MOVE.L    4(A0),CrunchedSongLength
  11075.     MOVE.L    8(A0),RealSongLength
  11076.     MOVE.L    SongDataPtr(PC),D0
  11077.     ADD.L    #70716,D0
  11078.     SUB.L    RealSongLength(PC),D0
  11079.     MOVE.L    D0,EndOfSongPtr
  11080.     LEA    DecrunchingText(PC),A0
  11081.     BSR    ShowStatusText
  11082.     BSR    Decruncher
  11083.     BSR    ShowAllRight
  11084. lososkip
  11085.     MOVE.L    SongDataPtr(PC),A0
  11086.     CMP.L    #'M.K.',sd_mahokakt(A0)        ;M.K. again...
  11087.     BEQ.S    lososkip2
  11088.     BSR    MahoneyAndKaktus        ;Was 16 instr, so move up...
  11089. lososkip2
  11090.     LEA    LoadingSongText(PC),A0
  11091.     BSR    ShowStatusText
  11092.     BSR    CheckAbort
  11093.     BEQ.S    lososkip3
  11094.     TST.B    AutoExitFlag
  11095.     BEQ.S    NoSongAutoExit
  11096.     BSR    ExitFromDir
  11097. NoSongAutoExit
  11098.     CLR.L    PatternNumber
  11099.     CLR.L    CurrPos
  11100.     BSR    RedrawPattern
  11101.     CLR    ScrPattPos
  11102.     BSR    SetScrPatternPos
  11103.     BSR    SortDisks
  11104.     LEA    SampleSortList(PC),A0
  11105.     MOVEQ    #30,D0
  11106. losoloop3
  11107.     TST.B    NosamplesFlag
  11108.     BNE.S    lososkip3
  11109.     BSR    CheckAbort
  11110.     BEQ.S    lososkip3
  11111.     MOVE    InsNum(PC),TuneUp
  11112.     JSR    DoShowFreeMem
  11113.     MOVE.L    (A0)+,D1
  11114.     MOVE    D1,InsNum
  11115.     MOVEM.L    D0/D1/A0,-(SP)
  11116.     BSR    LoadPreset
  11117.     BSR    ShowSampleInfo
  11118.     MOVEM.L    (SP)+,D0/D1/A0
  11119.     DBF    D0,losoloop3
  11120. lososkip3
  11121.     MOVE    #1,InsNum
  11122.     MOVE.L    #6,CurrSpeed
  11123.     CLR    LoadInProgress
  11124.     BSR    ShowAllRight
  11125.     BSR    SetNormalPtrCol
  11126.     JSR    DoShowFreeMem
  11127.     BSR    CheckInstrLengths
  11128.     BSR    ShowSampleInfo
  11129.     BRA    RedrawSample
  11130.  
  11131. SortDisks
  11132.     MOVEM.L    D0-D4/A0-A1,-(SP)
  11133.     MOVE.L    SongDataPtr(PC),A0
  11134.     LEA    23(A0),A0
  11135.     LEA    SampleSortList(PC),A1
  11136.     MOVEQ    #1,D0
  11137. losoloop4
  11138.     MOVE.B    (A0)+,(A1)+    ; ST-(0)1
  11139.     MOVE.B    (A0),(A1)+    ; ST-0(1)
  11140.     MOVE    D0,(A1)+    ; insnum
  11141.     LEA    29(A0),A0
  11142.     ADDQ.L    #1,D0
  11143.     CMP.L    #32,D0
  11144.     BLO.S    losoloop4
  11145. losoloop5
  11146.     CLR    MoreInstrFlag
  11147.     LEA    SampleSortList(PC),A0
  11148.     MOVEQ    #29,D2
  11149. losoloop6
  11150.     MOVE    (A0),D0
  11151.     MOVE    4(A0),D1
  11152.     CMP    D0,D1 ; if next disk greater
  11153.     BHS.S    loso2_2
  11154.     MOVE    #1,MoreInstrFlag
  11155.     MOVE.L    (A0),D3 ; swap disks
  11156.     MOVE.L    4(A0),D4
  11157.     MOVE.L    D4,(A0)
  11158.     MOVE.L    D3,4(A0)
  11159. loso2_2    ADDQ.L    #4,A0
  11160.     DBF    D2,losoloop6
  11161.     TST    MoreInstrFlag
  11162.     BNE.S    losoloop5
  11163.     LEA    SampleSortList(PC),A0
  11164.     MOVEQ    #30,D0
  11165. losoloop7
  11166.     CLR    (A0)
  11167.     ADDQ.L    #4,A0
  11168.     DBF    D0,losoloop7
  11169.     MOVEM.L    (SP)+,D0-D4/A0-A1
  11170.     RTS
  11171.  
  11172. MahoneyAndKaktus
  11173.     LEA    Loadas31Text(PC),A0
  11174.     BSR    AreYouSure
  11175.     BEQ.S    putmk
  11176.     MOVE.L    SongDataPtr(PC),A0    ; M.K. 32 samples format!
  11177.     LEA    466(A0),A1
  11178.     ADD.L    #66006,A0
  11179. makloop    MOVE.L    (A0),484(A0)
  11180.     CLR.L    (A0)
  11181.     SUBQ.L    #4,A0
  11182.     CMP.L    A0,A1
  11183.     BNE.S    makloop
  11184.     MOVE.L    SongDataPtr(PC),A0
  11185.     LEA    sd_mahokakt(A0),A1
  11186.     LEA    sd_numofpatt(A0),A0
  11187. makloop2
  11188.     MOVE    4(A0),(A0)+
  11189.     CMP.L    A0,A1
  11190.     BNE.S    makloop2
  11191.     MOVE.L    #'M.K.',(A0)            ;M.K. again!
  11192.     MOVEQ    #0,D0
  11193.     RTS
  11194.  
  11195. putmk    MOVE.L    SongDataPtr(PC),A0
  11196.     MOVE.L    #'M.K.',sd_mahokakt(A0)        ;put M.K.
  11197.     MOVEQ    #-1,D0
  11198.     RTS
  11199.  
  11200. Loadas31Text    dc.b    "Load as 31 instr?",0
  11201.  
  11202. CheckInstrLengths
  11203.     MOVE.L    SongDataPtr(PC),A0
  11204.     ADD.L    #20,A0
  11205.     MOVEQ    #30,D1
  11206. xilloop    MOVE    26(A0),D0
  11207.     ADD    28(A0),D0
  11208.     CMP    22(A0),D0
  11209.     BLS.S    xilskip
  11210.     MOVE    26(A0),D0
  11211.     LSR    #1,D0
  11212.     MOVE    D0,26(A0)
  11213. xilskip    ADD.L    #30,A0
  11214.     DBF    D1,xilloop
  11215.     RTS
  11216.  
  11217. CheckAbort
  11218.     BTST    #2,$DFF016
  11219.     BNE    Return2
  11220.     MOVEM.L    D0-D7/A0-A6,-(SP)
  11221.     LEA    AbortLoadText,A0
  11222.     BSR    AreYouSure
  11223.     BNE.S    chabno
  11224.     MOVEM.L    (SP)+,D0-D7/A0-A6
  11225.     MOVEQ    #0,D7
  11226.     RTS
  11227.  
  11228. chabno    MOVEM.L    (SP)+,D0-D7/A0-A6
  11229.     MOVEQ    #-1,D7
  11230.     RTS
  11231.  
  11232. StopIt    BSR.S    DoStopIt
  11233. TurnOffVoices
  11234.     MOVEM.L    A0-A1,-(SP)
  11235.     MOVE    #$000F,$DFF096
  11236.     CLR    $DFF0A8
  11237.     CLR    $DFF0B8
  11238.     CLR    $DFF0C8
  11239.     CLR    $DFF0D8
  11240.     CLR.B    RawKeyCode
  11241.     LEA    ScopeInfo,A0
  11242.     LEA    BlankSample,A1
  11243.     MOVE.L    A1,(A0)
  11244.     MOVE.L    A1,20(A0)
  11245.     MOVE.L    A1,40(A0)
  11246.     MOVE.L    A1,60(A0)
  11247.     MOVEM.L    (SP)+,A0-A1
  11248.     RTS
  11249.  
  11250. DoStopIt
  11251.     BSR    SetNormalPtrCol
  11252.     CLR.L    EditMode
  11253.     CLR.L    RunMode
  11254.     CLR.B    PattDelayTime
  11255.     CLR.B    PattDelayTime2
  11256.     BRA    RestoreEffects2
  11257.  
  11258.  
  11259. ;---- Edit ----
  11260.  
  11261. Edit    TST    SamScrEnable
  11262.     BNE    Return2
  11263.     BSR    StopIt
  11264.     CLR.B    RawKeyCode
  11265.     BSR    SetEditPtrCol
  11266.     BSR    SetScrPatternPos
  11267.     MOVE.L    #'edit',EditMode
  11268.     BRA    WaitForButtonUp
  11269.  
  11270. ;---- Edit Op. ----
  11271.  
  11272. DoEditOp
  11273.     CLR.B    RawKeyCode
  11274.     CMP    #1,CurrScreen
  11275.     BNE    Return2
  11276.     TST.B    EdEnable
  11277.     BEQ.S    EditOp
  11278.     ADDQ.B    #1,EdScreen
  11279.     CMP.B    #4,EdScreen
  11280.     BLO.S    EditOp
  11281.     MOVE.B    #1,EdScreen
  11282. EditOp    BSR    WaitForButtonUp
  11283.     ST    EdEnable
  11284.     ST    DisableAnalyzer
  11285.     JSR    ClearAnalyzerColors
  11286.     BSR    ClearRightArea
  11287.     BRA    DrawEditMenu
  11288.  
  11289. EdEnable    dc.b    0
  11290. EdScreen    dc.b    1
  11291.  
  11292. DrawEditMenu
  11293.     CMP.B    #1,EdScreen
  11294.     BNE.S    demskip
  11295.     MOVE.L    #EditOpText1,ShowTextPtr
  11296.     LEA    Edit1Data,A0
  11297.     BRA.S    demit
  11298. demskip
  11299.     CMP.B    #2,EdScreen
  11300.     BNE.S    demskip2
  11301.     MOVE.L    #EditOpText2,ShowTextPtr
  11302.     LEA    Edit2Data,A0
  11303.     BRA.S    demit
  11304. demskip2
  11305.     CMP.B    #3,EdScreen
  11306.     BNE    Return2
  11307.     MOVE.L    #EditOpText3,ShowTextPtr
  11308.     LEA    Edit3Data,A0
  11309. demit    BSR    Decompact
  11310.     BEQ    ExitEditOp
  11311.     LEA    BitPlaneData+SpectrumAnaPos,A0
  11312.     MOVEQ    #54,D0
  11313. demloop1
  11314.     MOVEQ    #24,D1
  11315. demloop2
  11316.     MOVE.B    1430(A1),PlaneSize(A0)
  11317.     MOVE.B    (A1)+,(A0)+
  11318.     DBF    D1,demloop2
  11319.     LEA    15(A0),A0
  11320.     ADDQ.L    #1,A1
  11321.     DBF    D0,demloop1
  11322.     BSR    FreeDecompMem
  11323.     MOVE    #1936,TextOffset
  11324.     MOVE    #22,TextLength
  11325.     BSR    ShowText
  11326.     CMP.B    #1,EdScreen
  11327.     BEQ    ShowSampleAll
  11328.     CMP.B    #2,EdScreen
  11329.     BNE.S    demskip3
  11330.     BSR    ShowTrackPatt
  11331.     BSR    ShowFrom
  11332.     BSR    ShowTo
  11333.     BSR    ShowRecordMode
  11334.     BSR    ShowQuantize
  11335.     BSR    ShowMetronome
  11336.     BRA    ShowMultiMode
  11337. demskip3
  11338.     CMP.B    #3,EdScreen
  11339.     BNE    Return2
  11340.     BSR    ShowHalfClip
  11341.     BSR    ShowPos
  11342.     BSR    ShowMod
  11343.     BRA    ShowVol
  11344.  
  11345. EditOpText1    dc.b    '  track      pattern  '
  11346. EditOpText2    dc.b    '  record     samples  '
  11347. EditOpText3    dc.b    '    sample editor     '
  11348.  
  11349. CheckEditOpGadgs
  11350.     MOVE    PattCurPos(PC),D0
  11351.     BSR.S    GetPositionPtr
  11352.     MOVEM.W    MouseX2,D0/D1
  11353.     CMP    #306,D0
  11354.     BHS.S    CheckEdSwap
  11355.     CMP.B    #1,EdScreen
  11356.     BEQ    CheckEdGadg1
  11357.     CMP.B    #2,EdScreen
  11358.     BEQ    CheckEdGadg2
  11359.     CMP.B    #3,EdScreen
  11360.     BEQ    CheckEdGadg3
  11361.     RTS
  11362.  
  11363. GetPositionPtr
  11364.     MOVE.L    SongDataPtr(PC),A0
  11365.     LEA    sd_patterndata(A0),A0
  11366.     MOVE.L    PatternNumber(PC),D2
  11367.     LSL.L    #8,D2
  11368.     LSL.L    #2,D2
  11369.     ADD.L    D2,A0
  11370.     MOVEQ    #0,D2
  11371.     MOVE    D0,D2
  11372.     DIVU    #6,D2
  11373.     LSL    #2,D2
  11374.     ADD    D2,A0
  11375.     RTS
  11376.  
  11377. CheckEdSwap
  11378.     CMP    #55,D1
  11379.     BLS    Return2
  11380.     MOVEQ    #1,D2
  11381.     CMP    #66,D1
  11382.     BLS.S    SetEditOpScreen
  11383.     MOVEQ    #2,D2
  11384.     CMP    #77,D1
  11385.     BLS.S    SetEditOpScreen
  11386.     MOVEQ    #3,D2
  11387.     CMP    #88,D1
  11388.     BLS.S    SetEditOpScreen
  11389.     CMP    #99,D1
  11390.     BLS.S    ExitEditOp
  11391.     RTS
  11392.  
  11393. SetEditOpScreen
  11394.     MOVE.B    D2,EdScreen
  11395.     BRA    EditOp
  11396.  
  11397. ExitEditOp
  11398.     SF    EdEnable
  11399.     CLR.B    RawKeyCode
  11400.     BRA    DisplayMainScreen
  11401.  
  11402. CheckEdGadg1
  11403.     CMP    #55,D1
  11404.     BLS    ToggleSampleAll
  11405.     CMP    #66,D1
  11406.     BLS    NoteUp
  11407.     CMP    #77,D1
  11408.     BLS    NoteDown
  11409.     CMP    #88,D1
  11410.     BLS    OctaveUp
  11411.     CMP    #99,D1
  11412.     BLS    OctaveDown
  11413.     RTS
  11414.  
  11415. CheckEdGadg2
  11416.     CMP    #55,D1
  11417.     BLS    ToggleTrackPatt
  11418.     CMP    #213,D0
  11419.     BLS.S    ceg2left
  11420.     CMP    #66,D1
  11421.     BLS    DeleteOrKill
  11422.     CMP    #77,D1
  11423.     BLS    ExchangeOrCopy
  11424.     CMP    #88,D1
  11425.     BLS    SetSampleFrom
  11426.     CMP    #99,D1
  11427.     BLS    SetSampleTo
  11428.     RTS
  11429.  
  11430. ceg2left
  11431.     CMP    #66,D1
  11432.     BLS    ToggleRecordMode
  11433.     CMP    #77,D1
  11434.     BLS    SetQuantize
  11435.     CMP    #88,D1
  11436.     BLS    SetMetronome
  11437.     CMP    #99,D1
  11438.     BLS    ToggleMultiMode
  11439.     RTS
  11440.  
  11441. CheckEdGadg3
  11442.     MOVE.L    SongDataPtr(PC),A5
  11443.     LEA    -10(A5),A5
  11444.     MOVE    InsNum(PC),D2
  11445.     BNE.S    ceg3skip
  11446.     MOVE    LastInsNum,D2
  11447. ceg3skip
  11448.     MULU    #30,D2
  11449.     ADD.L    D2,A5
  11450.     CMP    #55,D1
  11451.     BLS    ToggleHalfClip
  11452.     CMP    #213,D0
  11453.     BLS.S    ceg3mid
  11454.     CMP    #66,D1
  11455.     BLS    SetSamplePos
  11456.     CMP    #77,D1
  11457.     BLS    SetModSpeed
  11458.     CMP    #88,D1
  11459.     BLS    CutBeg
  11460.     CMP    #99,D1
  11461.     BLS    ChangeVolume
  11462.     RTS
  11463.  
  11464. ceg3mid    CMP    #165,D0
  11465.     BLS.S    ceg3left
  11466.     CMP    #66,D1
  11467.     BLS    Echo
  11468.     CMP    #77,D1
  11469.     BLS    Filter
  11470.     CMP    #88,D1
  11471.     BLS    Backwards
  11472.     CMP    #99,D1
  11473.     BLS    DownSample
  11474.     RTS
  11475.  
  11476. ceg3left
  11477.     CMP    #66,D1
  11478.     BLS    Mix
  11479.     CMP    #77,D1
  11480.     BLS    Boost
  11481.     CMP    #88,D1
  11482.     BLS    XFade
  11483.     CMP    #99,D1
  11484.     BLS    UpSample
  11485.     RTS
  11486.  
  11487. ToggleSampleAll
  11488.     BSR    WaitForButtonUp
  11489.     EOR.B    #1,SampleAllFlag
  11490. ShowSampleAll
  11491.     LEA    BitPlaneData+1838,A1
  11492.     LEA    S_BoxData,A2
  11493.     TST.B    SampleAllFlag
  11494.     BEQ    rtdoit2
  11495.     LEA    S_BoxData+A_BoxData,A2
  11496. rtdoit2    JMP    rtdoit
  11497.  
  11498. OctaveUp
  11499.     MOVE    #24,NoteShift
  11500.     BRA.S    nup2
  11501.  
  11502. NoteUp    MOVE    #2,NoteShift
  11503. nup2    BSR    SaveUndo
  11504.     CMP    #214,D0
  11505.     BLS.S    nup3
  11506.     MOVEQ    #0,D0
  11507.     BSR    GetPositionPtr
  11508.     BSR.S    SampleNoteUp
  11509.     MOVEQ    #6,D0
  11510.     BSR    GetPositionPtr
  11511.     BSR.S    SampleNoteUp
  11512.     MOVEQ    #12,D0
  11513.     BSR    GetPositionPtr
  11514.     BSR.S    SampleNoteUp
  11515.     MOVEQ    #18,D0
  11516.     BSR    GetPositionPtr
  11517. nup3    BSR.S    SampleNoteUp
  11518.     BRA    RedrawPattern
  11519.  
  11520. SampleNoteUp
  11521.     MOVEQ    #63,D6
  11522.     MOVE.L    A0,A3
  11523.     MOVE    InsNum(PC),D3
  11524.     TST.B    SampleAllFlag
  11525.     BEQ.S    sanulo2
  11526.     MOVEQ    #0,D3
  11527. sanulo2    MOVE.L    D6,D0
  11528.     MOVE.L    A3,A0
  11529. sanuloop
  11530.     MOVE.B    2(A0),D1
  11531.     LSR.B    #4,D1
  11532.     MOVE.B    (A0),D2
  11533.     AND.B    #$F0,D2
  11534.     OR.B    D2,D1
  11535.     CMP.B    D3,D1
  11536.     BNE.S    sanuskip
  11537.     MOVE    (A0),D1
  11538.     MOVE    D1,D2
  11539.     AND    #$F000,D2
  11540.     AND    #$0FFF,D1
  11541.     BEQ.S    sanuskip
  11542.     BSR    CheckPeriod
  11543.     BNE.S    sanuskip
  11544.     ADD    NoteShift(PC),D5
  11545.     CMP    #$0048,D5
  11546.     BLO.S    sanuok
  11547.     TST.B    TransDelFlag
  11548.     BEQ.S    sanuskip
  11549.     AND.L    #$00000FFF,(A0)
  11550.     BRA.S    sanuskip
  11551. sanuok    MOVE    0(A2,D5.W),D1
  11552.     OR    D2,D1
  11553.     MOVE    D1,(A0)
  11554. sanuskip
  11555.     LEA    16(A0),A0
  11556.     DBF    D0,sanuloop
  11557.     TST.B    SampleAllFlag
  11558.     BEQ    Return2
  11559.     ADDQ    #1,D3
  11560.     CMP    #32,D3
  11561.     BLO.S    sanulo2
  11562.     RTS
  11563.  
  11564. OctaveDown
  11565.     MOVE    #24,NoteShift
  11566.     BRA.S    ndown2
  11567.  
  11568. NoteDown
  11569.     MOVE    #2,NoteShift
  11570. ndown2    BSR    SaveUndo
  11571.     CMP    #214,D0
  11572.     BLS.S    ndown3
  11573.     MOVEQ    #0,D0
  11574.     BSR    GetPositionPtr
  11575.     BSR.S    SampleNoteDown
  11576.     MOVEQ    #6,D0
  11577.     BSR    GetPositionPtr
  11578.     BSR.S    SampleNoteDown
  11579.     MOVEQ    #12,D0
  11580.     BSR    GetPositionPtr
  11581.     BSR.S    SampleNoteDown
  11582.     MOVEQ    #18,D0
  11583.     BSR    GetPositionPtr
  11584. ndown3    BSR.S    SampleNoteDown
  11585.     BRA    RedrawPattern
  11586.  
  11587. SampleNoteDown
  11588.     MOVEQ    #63,D6
  11589.     MOVE.L    A0,A3
  11590.     MOVE    InsNum(PC),D3
  11591.     TST.B    SampleAllFlag
  11592.     BEQ.S    sandlo2
  11593.     MOVEQ    #0,D3
  11594. sandlo2    MOVE    D6,D0
  11595.     MOVE.L    A3,A0
  11596. sandloop
  11597.     MOVE.B    2(A0),D1
  11598.     LSR.B    #4,D1
  11599.     MOVE.B    (A0),D2
  11600.     AND.B    #$F0,D2
  11601.     OR.B    D2,D1
  11602.     CMP.B    D1,D3
  11603.     BNE.S    sandskip
  11604.     MOVE    (A0),D1
  11605.     MOVE    D1,D2
  11606.     AND    #$F000,D2
  11607.     AND    #$0FFF,D1
  11608.     BEQ.S    sandskip
  11609.     BSR.S    CheckPeriod
  11610.     BNE.S    sandskip
  11611.     SUB    NoteShift(PC),D5
  11612.     BPL.S    sandok
  11613.     TST.B    TransDelFlag
  11614.     BEQ.S    sandskip
  11615.     AND.L    #$00000FFF,(A0)
  11616.     BRA.S    sandskip
  11617. sandok    MOVE    0(A2,D5.W),D1
  11618.     OR    D2,D1
  11619.     MOVE    D1,(A0)
  11620. sandskip
  11621.     LEA    16(A0),A0
  11622.     DBF    D0,sandloop
  11623.     TST.B    SampleAllFlag
  11624.     BEQ    Return2
  11625.     ADDQ    #1,D3
  11626.     CMP    #$20,D3
  11627.     BLO.S    sandlo2
  11628.     RTS
  11629.  
  11630. NoteShift
  11631.     dc.w    0
  11632.  
  11633. CheckPeriod
  11634.     LEA    PeriodTable(PC),A2
  11635.     MOVEQ    #-2,D5
  11636. chpeloop
  11637.     ADDQ.L    #2,D5
  11638.     MOVE    0(A2,D5.W),D4
  11639.     BEQ.S    PeriodNotOk
  11640.     CMP    D4,D1
  11641.     BEQ.S    PeriodOk
  11642.     BRA.S    chpeloop
  11643.  
  11644. PeriodOk
  11645.     MOVEQ    #0,D4
  11646.     RTS
  11647.  
  11648. PeriodNotOk
  11649.     MOVEQ    #-1,D4
  11650.     RTS
  11651.  
  11652. ToggleTrackPatt
  11653.     BSR    WaitForButtonUp
  11654.     ADDQ.B    #1,TrackPattFlag
  11655.     CMP.B    #3,TrackPattFlag
  11656.     BLO.S    ShowTrackPatt
  11657.     CLR.B    TrackPattFlag
  11658. ShowTrackPatt
  11659.     LEA    BitPlaneData+1838,A1
  11660.     LEA    S_BoxData+T_BoxData,A2
  11661.     TST.B    TrackPattFlag
  11662.     BEQ    rtdoit2
  11663.     LEA    S_BoxData+P_BoxData,A2
  11664.     CMP.B    #1,TrackPattFlag
  11665.     BEQ    rtdoit2
  11666.     LEA    S_BoxData,A2
  11667.     BRA    rtdoit2
  11668.  
  11669. KillInstrTrack
  11670.     BSR    SaveUndo
  11671.     MOVE    PattCurPos(PC),D0
  11672.     BSR    GetPositionPtr
  11673.     BRA.S    dst2
  11674.  
  11675. DeleteOrKill
  11676.     CMP    #260,D0
  11677.     BHS    KillSample
  11678. DelSampleTrack
  11679.     BSR    SaveUndo
  11680.     TST.B    TrackPattFlag
  11681.     BEQ.S    dst2
  11682.     MOVEQ    #0,D0
  11683.     BSR    GetPositionPtr
  11684.     BSR.S    dstdoit
  11685.     MOVEQ    #6,D0
  11686.     BSR    GetPositionPtr
  11687.     BSR.S    dstdoit
  11688.     MOVEQ    #12,D0
  11689.     BSR    GetPositionPtr
  11690.     BSR.S    dstdoit
  11691.     MOVEQ    #18,D0
  11692.     BSR    GetPositionPtr
  11693. dst2    BSR.S    dstdoit
  11694.     BRA    RedrawPattern
  11695.  
  11696. dstdoit    CLR.B    RawKeyCode
  11697.     MOVEQ    #63,D0
  11698.     MOVE    InsNum(PC),D3
  11699.     BEQ    NotSampleNull
  11700. ksloop    MOVE.B    2(A0),D1
  11701.     LSR.B    #4,D1
  11702.     MOVE.B    (A0),D2
  11703.     AND.B    #$F0,D2
  11704.     OR.B    D2,D1
  11705.     CMP.B    D1,D3
  11706.     BNE.S    ksskip
  11707.     CLR.L    (A0)
  11708. ksskip    LEA    16(A0),A0
  11709.     DBF    D0,ksloop
  11710.     RTS
  11711.  
  11712. KillSample
  11713.     LEA    KillSampleText,A0
  11714.     BSR    AreYouSure
  11715.     BNE    Return2
  11716. Destroy    BSR    StorePtrCol
  11717.     MOVE    InsNum(PC),D0
  11718.     BEQ    ErrorRestoreCol
  11719.     BSR    TurnOffVoices
  11720.     BSR    FreeSample
  11721.     MOVE.L    SongDataPtr(PC),A0
  11722.     MOVE    InsNum(PC),D0
  11723.     MULU    #30,D0
  11724.     LEA    -10(A0),A0
  11725.     ADD.L    D0,A0
  11726.     MOVE.L    A0,A1
  11727.     MOVEQ    #29,D0
  11728. kisalop    CLR.B    (A0)+
  11729.     DBF    D0,kisalop
  11730.     MOVE    #1,28(A1)
  11731.     BSR    ShowSampleInfo
  11732.     BSR    RedrawSample
  11733.     BRA    RestorePtrCol
  11734.  
  11735. ExchangeOrCopy
  11736.     MOVEQ    #-1,D4
  11737.     CMP    #260,D0
  11738.     BHS.S    CopySampleTrack
  11739. ExchSampleTrack
  11740.     CMP.B    #2,TrackPattFlag
  11741.     BEQ    ExchSamples
  11742.     MOVEQ    #0,D4
  11743.     BRA.S    mstskip
  11744. CopySampleTrack
  11745.     CMP.B    #2,TrackPattFlag
  11746.     BEQ    CopySamples
  11747. mstskip    TST.B    TrackPattFlag
  11748.     BEQ.S    mst2
  11749.     MOVEQ    #0,D0
  11750.     BSR    GetPositionPtr
  11751.     BSR.S    mstdoit
  11752.     MOVEQ    #6,D0
  11753.     BSR    GetPositionPtr
  11754.     BSR.S    mstdoit
  11755.     MOVEQ    #12,D0
  11756.     BSR    GetPositionPtr
  11757.     BSR.S    mstdoit
  11758.     MOVEQ    #18,D0
  11759.     BSR    GetPositionPtr
  11760. mst2    BSR.S    mstdoit
  11761.     BRA    RedrawPattern
  11762.  
  11763. mstdoit    MOVEQ    #63,D0
  11764. esloop    MOVE.B    2(A0),D1
  11765.     LSR.B    #4,D1
  11766.     MOVE.B    (A0),D2
  11767.     AND.B    #$F0,D2
  11768.     OR.B    D2,D1
  11769.     CMP.B    SampleFrom(PC),D1
  11770.     BNE.S    esskip2
  11771.     AND.L    #$0FFF0FFF,(A0)
  11772.     MOVE.B    SampleTo(PC),D2
  11773.     MOVE.B    D2,D3
  11774.     AND.B    #$F0,D2
  11775.     OR.B    D2,(A0)
  11776.     LSL.B    #4,D3
  11777.     OR.B    D3,2(A0)
  11778.     BRA.S    esskip3
  11779. esskip2    TST.B    D4
  11780.     BNE.S    esskip3
  11781.     CMP.B    SampleTo(PC),D1
  11782.     BNE.S    esskip3
  11783.     AND.L    #$0FFF0FFF,(A0)
  11784.     MOVE.B    SampleFrom(PC),D2
  11785.     MOVE.B    D2,D3
  11786.     AND.B    #$F0,D2
  11787.     OR.B    D2,(A0)
  11788.     LSL.B    #4,D3
  11789.     OR.B    D3,2(A0)
  11790. esskip3    LEA    16(A0),A0
  11791.     DBF    D0,esloop
  11792.     RTS
  11793.  
  11794. ExchSamples
  11795.     BSR    StorePtrCol
  11796.     MOVEQ    #0,D0
  11797.     MOVE.B    SampleFrom(PC),D0
  11798.     BEQ    ErrorRestoreCol
  11799.     MOVEQ    #0,D1
  11800.     MOVE.B    SampleTo(PC),D1
  11801.     BEQ    ErrorRestoreCol
  11802.     MOVE    D0,D2
  11803.     MOVE    D1,D3
  11804.     LEA    SampleLengthAdd+2,A2
  11805.     LSL    #1,D2
  11806.     LSL    #1,D3
  11807.     LEA    (A2,D2.W),A0
  11808.     LEA    (A2,D3.W),A1
  11809.     MOVE    (A0),D4
  11810.     MOVE    (A1),(A0)
  11811.     MOVE    D4,(A1)
  11812.     LEA    SamplePtrs,A2
  11813.     LSL    #1,D2
  11814.     LSL    #1,D3
  11815.     LEA    (A2,D2.W),A0
  11816.     LEA    (A2,D3.W),A1
  11817.     MOVE.L    (A0),D4
  11818.     MOVE.L    (A1),(A0)
  11819.     MOVE.L    D4,(A1)
  11820.     MOVE.L    124(A0),D4
  11821.     MOVE.L    124(A1),124(A0)
  11822.     MOVE.L    D4,124(A1)
  11823.     SUBQ    #1,D0
  11824.     SUBQ    #1,D1
  11825.     MULU    #30,D0
  11826.     MULU    #30,D1
  11827.     MOVE.L    SongDataPtr(PC),A2
  11828.     LEA    20(A2),A2
  11829.     LEA    (A2,D0.W),A0
  11830.     LEA    (A2,D1.W),A1
  11831.     MOVEQ    #29,D0
  11832. exsalop    MOVE.B    (A0),D1
  11833.     MOVE.B    (A1),(A0)+
  11834.     MOVE.B    D1,(A1)+
  11835.     DBF    D0,exsalop
  11836.     BSR    ShowSampleInfo
  11837.     BSR    RedrawSample
  11838.     BRA    RestorePtrCol
  11839.  
  11840. CopySamples
  11841.     BSR    StorePtrCol
  11842.     MOVEQ    #0,D0
  11843.     MOVE.B    SampleFrom(PC),D0
  11844.     BEQ    ErrorRestoreCol
  11845.     MOVEQ    #0,D1
  11846.     MOVE.B    SampleTo(PC),D1
  11847.     BEQ    ErrorRestoreCol
  11848.     LEA    SamplePtrs(PC),A2
  11849.     LSL    #2,D0
  11850.     LSL    #2,D1
  11851.     LEA    (A2,D0.W),A3
  11852.     LEA    (A2,D1.W),A4
  11853.     MOVE.L    (A3),D0
  11854.     BEQ    ErrorRestoreCol
  11855.     MOVE.L    124(A3),D0
  11856.     MOVEQ    #MEMF_CHIP,D1
  11857.     MOVE.L    4.W,A6
  11858.     JSR    LVOAllocMem(A6)
  11859.     TST.L    D0
  11860.     BEQ    OutOfMemErr
  11861.     MOVE.L    D0,A5
  11862.     MOVEQ    #0,D0
  11863.     MOVE.B    SampleTo(PC),D0
  11864.     MOVE    D0,InsNum
  11865.     BSR    Destroy
  11866.     MOVE.L    A5,(A4)
  11867.     MOVE.L    124(A3),D0
  11868.     MOVE.L    D0,124(A4)
  11869.     MOVE.L    (A3),A0
  11870. cosalp2    MOVE.B    (A0)+,(A5)+
  11871.     SUBQ.L    #1,D0
  11872.     BNE.S    cosalp2
  11873.     MOVEQ    #0,D0
  11874.     MOVEQ    #0,D1
  11875.     MOVE.B    SampleFrom(PC),D0
  11876.     MOVE.B    SampleTo(PC),D1
  11877.     MOVE    D1,InsNum
  11878.     MULU    #30,D0
  11879.     MULU    #30,D1
  11880.     MOVE.L    SongDataPtr(PC),A2
  11881.     LEA    -10(A2),A2
  11882.     LEA    (A2,D0.W),A0
  11883.     LEA    (A2,D1.W),A1
  11884.     MOVEQ    #29,D0
  11885. cosalop    MOVE.B    (A0)+,(A1)+
  11886.     DBF    D0,cosalop
  11887.     BSR    ShowSampleInfo
  11888.     BSR    RedrawSample
  11889.     BRA    RestorePtrCol
  11890.  
  11891. SetSampleFrom
  11892.     MOVE    InsNum(PC),D2
  11893.     CMP    #283,D0
  11894.     BLS.S    sesfskip
  11895.     MOVE.B    SampleFrom(PC),D2
  11896.     CMP    #295,D0
  11897.     BLS.S    sesfup
  11898.     SUBQ.B    #1,D2
  11899.     BPL.S    sesfskip
  11900.     MOVEQ    #0,D2
  11901. sesfskip
  11902.     MOVE.B    D2,SampleFrom
  11903.     JSR    Wait_4000
  11904.     BRA.S    ShowFrom
  11905. sesfup    ADDQ.B    #1,D2
  11906.     CMP.B    #$1F,D2
  11907.     BLS.S    sesfskip
  11908.     MOVE.B    #$1F,SampleFrom
  11909. ShowFrom
  11910.     MOVE    #3273,TextOffset
  11911.     CLR    WordNumber
  11912.     MOVE.B    SampleFrom(PC),WordNumber+1
  11913.     BRA    PrintHexByte
  11914.  
  11915. SetSampleTo
  11916.     MOVE    InsNum(PC),D2
  11917.     CMP    #283,D0
  11918.     BLS.S    sestskip
  11919.     MOVE.B    SampleTo(PC),D2
  11920.     CMP    #295,D0
  11921.     BLS.S    sestup
  11922.     SUBQ.B    #1,D2
  11923.     BPL.S    sestskip
  11924.     MOVEQ    #0,D2
  11925. sestskip
  11926.     MOVE.B    D2,SampleTo
  11927.     JSR    Wait_4000
  11928.     BRA.S    ShowTo
  11929. sestup    ADDQ.B    #1,D2
  11930.     CMP.B    #$1F,D2
  11931.     BLS.S    sestskip
  11932.     MOVE.B    #$1F,SampleTo
  11933. ShowTo    MOVE    #3713,TextOffset
  11934.     CLR    WordNumber
  11935.     MOVE.B    SampleTo(PC),WordNumber+1
  11936.     BRA    PrintHexByte
  11937.  
  11938. SampleFrom    dc.b 0
  11939. SampleTo    dc.b 0
  11940.  
  11941. ToggleRecordMode
  11942.     BSR    WaitForButtonUp
  11943.     EOR.B    #1,RecordMode
  11944. ShowRecordMode
  11945.     MOVE    #2382,D1
  11946.     LEA    PattText,A0
  11947.     TST.B    RecordMode
  11948.     BEQ.S    srmskip
  11949.     LEA    SongText,A0
  11950. srmskip    MOVEQ    #4,D0
  11951.     BRA    ShowText3
  11952.  
  11953. PattText    dc.b 'patt'
  11954. SongText    dc.b 'song'
  11955. RecordMode    dc.b 0
  11956. QuantizeValue    dc.b 1
  11957. MetroSpeed    dc.b 4
  11958. MetroChannel    dc.b 0
  11959. MultiFlag    dc.b 0
  11960. SampleAllFlag    dc.b 0
  11961. TrackPattFlag    dc.b 0
  11962. ClipHalveFlag    dc.b 0
  11963. AbortDecFlag    dc.w 0
  11964.  
  11965. GetDecByte
  11966.     MOVE    #1,AbortDecFlag
  11967.     BSR    StorePtrCol
  11968.     BSR    SetWaitPtrCol
  11969.     BSR    UpdateLineCurPos
  11970.     BSR    GetKey0_9
  11971.     CMP.B    #68,D1
  11972.     BEQ.S    gdbexit
  11973.     MOVE.B    D1,D0
  11974.     MULU    #10,D0
  11975.     MOVE.B    D0,GetDecTemp
  11976.     BSR    ShowOneDigit
  11977.     ADDQ    #8,LineCurX
  11978.     BSR    UpdateLineCurPos
  11979.     BSR    GetKey0_9
  11980.     CMP.B    #68,D1
  11981.     BEQ.S    gdbexit
  11982.     ADD.B    D1,GetDecTemp
  11983.     CLR    AbortDecFlag
  11984. gdbexit    CLR    LineCurX
  11985.     MOVE    #270,LineCurY
  11986.     BSR    UpdateLineCurPos
  11987.     BSR    RestorePtrCol
  11988.     MOVE.B    GetDecTemp,D0
  11989.     RTS
  11990.  
  11991. SetQuantize
  11992.     CLR.B    RawKeyCode
  11993.     MOVE    #196,LineCurX
  11994.     MOVE    #76,LineCurY
  11995.     MOVE    #2824,TextOffset
  11996.     BSR    GetDecByte
  11997.     TST    AbortDecFlag
  11998.     BNE    ShowQuantize
  11999.     CMP.B    #63,D0
  12000.     BLS.S    tqskip
  12001.     MOVEQ.B    #63,D0
  12002. tqskip    MOVE.B    D0,QuantizeValue
  12003. ShowQuantize
  12004.     MOVE    #2824,TextOffset
  12005.     CLR    WordNumber
  12006.     MOVE.B    QuantizeValue,WordNumber+1
  12007.     BRA    Print2DecDigits
  12008.  
  12009. SetMetronome
  12010.     CLR.B    RawKeyCode
  12011.     CMP    #188,D0
  12012.     BHS.S    smchan
  12013.     MOVE    #3261,TextOffset
  12014.     MOVE    #172,LineCurX
  12015.     MOVE    #87,LineCurY
  12016.     BSR    GetDecByte
  12017.     TST    AbortDecFlag
  12018.     BNE    ShowMetronome
  12019.     CMP.B    #64,D0
  12020.     BLS.S    smexit
  12021.     MOVEQ.B    #64,D0
  12022. smexit    MOVE.B    D0,MetroSpeed
  12023.     BRA.S    ShowMetronome
  12024.  
  12025. smchan    MOVE    #3264,TextOffset
  12026.     BSR    GetHexByte
  12027.     CMP    #4,D0
  12028.     BLS.S    smexit2
  12029.     MOVEQ    #4,D0
  12030. smexit2    MOVE.B    D0,MetroChannel
  12031. ShowMetronome
  12032.     MOVE    #3261,TextOffset
  12033.     CLR    WordNumber
  12034.     MOVE.B    MetroSpeed,WordNumber+1
  12035.     BSR    Print2DecDigits
  12036.     MOVE    #3264,TextOffset
  12037.     CLR    WordNumber
  12038.     MOVE.B    MetroChannel,WordNumber+1
  12039.     BRA    Print2DecDigits
  12040.  
  12041. ToggleMultiMode
  12042.     BSR    WaitForButtonUp
  12043.     CLR.B    RawKeyCode
  12044.     EOR.B    #1,MultiFlag
  12045. ShowMultiMode
  12046.     BSR.S    Show_MS
  12047.     CMP    #1,CurrScreen
  12048.     BNE    Return2
  12049.     CMP.B    #2,EdScreen
  12050.     BNE    Return2
  12051.     TST.B    EdEnable
  12052.     BEQ    Return2
  12053.     MOVE    #3700,D1
  12054.     LEA    SingleText(PC),A0
  12055.     TST.B    MultiFlag
  12056.     BEQ.S    smmskip
  12057.     LEA    MultiText(PC),A0
  12058. smmskip    MOVEQ    #6,D0
  12059.     BRA    ShowText3
  12060.  
  12061. SingleText    dc.b 'single'
  12062. MultiText    dc.b ' multi'
  12063.  
  12064. Show_MS    CMP    #4,CurrScreen
  12065.     BEQ    Return2
  12066.     MOVE.B    #' ',D0
  12067.     TST.B    MultiFlag
  12068.     BEQ.S    smsskp1
  12069.     MOVE.B    #'M',D0
  12070. smsskp1    MOVE.B    #' ',D1
  12071.     TST.B    SplitFlag
  12072.     BEQ.S    smsskp2
  12073.     MOVE.B    #'S',D1
  12074. smsskp2    MOVE.B    D0,mstext
  12075.     MOVE.B    D1,mstext+1
  12076.     MOVE    #4121,D1
  12077.     MOVEQ    #2,D0
  12078.     LEA    mstext(PC),A0
  12079.     BSR    ShowText3
  12080.     BRA    ShowAutoInsert
  12081.  
  12082. mstext    dc.b '__'
  12083.  
  12084. ;---- Edit Op. 3 ----
  12085.  
  12086. ToggleHalfClip
  12087.     BSR    WaitForButtonUp
  12088.     EOR.B    #1,HalfClipFlag
  12089. ShowHalfClip
  12090.     LEA    BitPlaneData+1838,A1
  12091.     LEA    S_BoxData+H_BoxData,A2        ;&&
  12092.     TST.B    HalfClipFlag
  12093.     BEQ.S    ogaoga
  12094.     LEA    S_BoxData+C_BoxData,A2
  12095. ogaoga    JMP    rtdoit
  12096.  
  12097. SetSamplePos
  12098.     MOVE.L    SamplePos(PC),D2
  12099.     CMP    #283,D0
  12100.     BLS    Return2
  12101.     CMP    #295,D0
  12102.     BLS.S    shpoup
  12103.     SUBQ.L    #1,D2
  12104.     BTST    #2,$DFF016
  12105.     BNE.S    shposkip
  12106.     SUB.L    #15,D2
  12107. shposkip
  12108.     BPL.S    shposkip2
  12109.     MOVEQ    #0,D2
  12110. shposkip2
  12111.     MOVE.L    D2,SamplePos
  12112.     BRA.S    ShowPos
  12113. shpoup    ADDQ.L    #1,D2
  12114.     BTST    #2,$DFF016
  12115.     BNE.S    shposkip3
  12116.     ADD.L    #15,D2
  12117. shposkip3
  12118.     MOVEQ    #0,D3
  12119.     MOVE    22(A5),D3
  12120.     LSL.L    #1,D3
  12121.     CMP.L    D3,D2
  12122.     BLS.S    shposkip2
  12123.     MOVE.L    D3,SamplePos
  12124. ShowPos    CMP    #1,CurrScreen
  12125.     BNE    Return2
  12126.     TST.B    EdEnable
  12127.     BEQ    Return2
  12128.     CMP.B    #3,EdScreen
  12129.     BNE    Return2
  12130.     MOVE    #2391,TextOffset
  12131.     MOVE    SamplePos+2(PC),WordNumber
  12132.     BSR    PrintHexWord
  12133.     RTS
  12134.  
  12135. SetModSpeed
  12136.     CMP    #243,D0
  12137.     BLS    DoMod
  12138.     MOVEQ    #0,D2
  12139.     BTST    #2,$DFF016
  12140.     BEQ.S    semoskp
  12141.     MOVE.B    ModSpeed,D2
  12142.     CMP    #283,D0
  12143.     BLS    Return2
  12144.     CMP    #295,D0
  12145.     BLS.S    semoup
  12146.     SUB.B    #1,D2
  12147.     CMP.B    #127,D2
  12148.     BNE.S    semoskp
  12149.     MOVE.B    #128,D2
  12150.     BRA.S    semoskp
  12151. semoup    ADD.B    #1,D2
  12152.     CMP.B    #128,D2
  12153.     BNE.S    semoskp
  12154.     MOVEQ    #127,D2
  12155. semoskp    MOVE.B    D2,ModSpeed
  12156.     JSR    Wait_4000
  12157. ShowMod    LEA    PlusMinusText(PC),A0
  12158.     MOVEQ    #0,D6
  12159.     MOVE.B    ModSpeed,D6
  12160.     BPL.S    shmoskp
  12161.     NEG.B    D6
  12162.     ADDQ.L    #1,A0
  12163. shmoskp    MOVEQ    #1,D0
  12164.     MOVE    #2831,D1
  12165.     BSR    ShowText3
  12166.     MOVE    D6,WordNumber
  12167.     BRA    Print3DecDigits
  12168.  
  12169. PlusMinusText    dc.b ' -'
  12170.  
  12171. DoMod    BSR    WaitForButtonUp
  12172.     BSR    StorePtrCol
  12173.     BSR    SetWaitPtrCol
  12174.     MOVEQ    #0,D2
  12175.     MOVE    SampleInfo(PC),D2
  12176.     BEQ    ErrorRestoreCol
  12177.     LSL    #1,D2
  12178.     SUBQ    #1,D2
  12179.     MOVE.L    si_pointer,D0
  12180.     BEQ    ErrorRestoreCol
  12181.     BSR    AllocBuffer
  12182.     MOVE.L    D0,A2
  12183.     MOVE.L    D0,A3
  12184.     MOVE.L    A1,A4
  12185.     ADD.L    D2,A3
  12186.     CLR.L    ModOffset
  12187.     CLR.L    ModPos
  12188. dmoloop    CMP.L    A3,A2
  12189.     BHS.S    dmoskip
  12190.     MOVE.B    (A1),(A2)+
  12191.     BSR.S    UpdateMod
  12192.     BRA.S    dmoloop
  12193. dmoskip    MOVE.L    si_pointer(PC),A1
  12194.     CLR    (A1)
  12195.     BSR    FreeBuffer
  12196.     BSR    RestorePtrCol
  12197.     BRA    DisplaySample
  12198.  
  12199. UpdateMod
  12200.     MOVE.B    ModSpeed(PC),D0
  12201.     BEQ.S    upmplus
  12202.     EXT    D0
  12203.     EXT.L    D0
  12204.     MOVE.L    ModPos(PC),D1
  12205.     ADD.L    D0,D1
  12206.     MOVE.L    D1,ModPos
  12207.     ASR.L    #8,D1
  12208.     ASR.L    #4,D1
  12209.     MOVE.L    D1,D3
  12210.     AND    #$1F,D1
  12211.     LEA    VibratoTable,A0
  12212.     MOVEQ    #0,D0
  12213.     MOVE.B    (A0,D1.W),D0
  12214.     LSR.B    #2,D0
  12215.     MOVE.L    ModOffset(PC),D1
  12216.     BTST    #5,D3
  12217.     BEQ.S    upmskip
  12218.     SUB.L    D0,D1
  12219.     BRA.S    upmskp2
  12220. upmskip    ADD.L    D0,D1
  12221. upmskp2    ADD.L    #$800,D1
  12222.     MOVE.L    D1,ModOffset
  12223.     ASR.L    #8,D1
  12224.     ASR.L    #3,D1
  12225.     BPL.S    upmskp3
  12226.     MOVEQ    #0,D1
  12227. upmskp3    CMP.L    D2,D1
  12228.     BLO.S    upmskp4
  12229.     MOVE.L    D2,D1
  12230. upmskp4    MOVE.L    A4,A1
  12231.     ADD.L    D1,A1
  12232.     RTS
  12233. upmplus    ADDQ.L    #1,A1
  12234.     RTS
  12235.  
  12236. CutBeg    CMP    #283,D0
  12237.     BHI    FadeDown
  12238.     CMP    #259,D0
  12239.     BHI    FadeUp
  12240.     BSR    WaitForButtonUp
  12241.     BSR    StorePtrCol
  12242.     BSR    SetWaitPtrCol
  12243.     MOVEQ    #0,D3
  12244.     MOVE    SampleInfo(PC),D3
  12245.     BEQ    ErrorRestoreCol
  12246.     LSL    #1,D3
  12247.     SUBQ    #1,D3
  12248.     MOVE.L    si_pointer,D0
  12249.     BEQ    ErrorRestoreCol
  12250.     MOVE.L    D0,A1
  12251.     MOVE.L    D0,A2
  12252.     MOVE.L    D0,A3
  12253.     ADD.L    SamplePos(PC),A2
  12254.     ADD.L    D3,A3
  12255. cbeloop    CMP.L    A3,A2
  12256.     BHS.S    cbeskip
  12257.     MOVE.B    (A2),D0
  12258.     CLR.B    (A2)+
  12259.     MOVE.B    D0,(A1)+
  12260.     BRA.S    cbeloop
  12261. cbeskip    MOVE.L    si_pointer(PC),A2
  12262.     CLR    (A2)
  12263.     SUB.L    A2,A1
  12264.     MOVE.L    A1,D0
  12265.     LSR.L    #1,D0
  12266.     ADDQ.L    #1,D0
  12267.     AND    #$7FFF,D0
  12268.     MOVE    D0,22(A5)
  12269.     BSR    ShowSampleInfo
  12270.     BSR    RestorePtrCol
  12271.     BRA    DisplaySample
  12272.  
  12273. FadeUp    BSR    WaitForButtonUp
  12274.     BSR    StorePtrCol
  12275.     BSR    SetWaitPtrCol
  12276.     MOVEQ    #0,D3
  12277.     MOVE    SampleInfo(PC),D3
  12278.     BEQ    ErrorRestoreCol
  12279.     MOVEQ    #0,D1
  12280.     MOVE.L    SamplePos(PC),D2
  12281.     BEQ    ErrorRestoreCol
  12282.     MOVE.L    si_pointer,D0
  12283.     BEQ    ErrorRestoreCol
  12284.     MOVE.L    D0,A0
  12285.     LSR    #1,D2
  12286.     BEQ    ErrorRestoreCol
  12287.     MOVEQ    #0,D4
  12288. fuloop    MOVE.B    (A0),D0
  12289.     EXT    D0
  12290.     MULS    D1,D0
  12291.     DIVS    D2,D0
  12292.     MOVE.B    D0,(A0)+
  12293.     ADDQ    #1,D4
  12294.     MOVE    D4,D1
  12295.     LSR    #1,D1
  12296.     CMP    D2,D1
  12297.     BLO.S    fuloop
  12298.     BSR    RestorePtrCol
  12299.     BRA    DisplaySample
  12300.  
  12301. FadeDown
  12302.     BSR    WaitForButtonUp
  12303.     BSR    StorePtrCol
  12304.     BSR    SetWaitPtrCol
  12305.     MOVEQ    #0,D3
  12306.     MOVE    SampleInfo(PC),D3
  12307.     BEQ    ErrorRestoreCol
  12308.     LSL.L    #1,D3
  12309.     SUBQ.L    #1,D3 ;Length-1
  12310.     MOVE.L    SamplePos(PC),D2
  12311.     CMP.L    D3,D2
  12312.     BHS    ErrorRestoreCol
  12313.     MOVE.L    D3,D4 ; Copy length to D4
  12314.     SUB.L    D2,D3 ; Length-pos
  12315.     MOVE.L    D3,D2 ; Copy offset to D2
  12316.     MOVE.L    si_pointer,D0
  12317.     BEQ    ErrorRestoreCol
  12318.     MOVE.L    D0,A0
  12319.     LEA    (A0,D4.L),A0 ;Start at end of sample
  12320.     LSR    #1,D2
  12321.     BEQ    ErrorRestoreCol
  12322.     MOVEQ    #0,D1
  12323.     MOVEQ    #0,D4
  12324. fdloop    MOVE.B    (A0),D0
  12325.     EXT    D0
  12326.     MULS    D1,D0
  12327.     DIVS    D2,D0
  12328.     MOVE.B    D0,(A0)
  12329.     SUBQ.L    #1,A0
  12330.     ADDQ    #1,D4
  12331.     MOVE    D4,D1
  12332.     LSR    #1,D1
  12333.     CMP    D2,D1
  12334.     BLO.S    fdloop
  12335.     BSR    RestorePtrCol
  12336.     BRA    DisplaySample
  12337.  
  12338. ChangeVolume
  12339.     MOVE    SampleVol(PC),D2
  12340.     CMP    #243,D0
  12341.     BLS    DoChangeVol
  12342.     CMP    #283,D0
  12343.     BLS    Return2
  12344.     CMP    #295,D0
  12345.     BLS    shvoup
  12346.     SUBQ    #1,D2
  12347.     BTST    #2,$DFF016
  12348.     BNE.S    shvoskip
  12349.     SUB    #9,D2
  12350. shvoskip
  12351.     BPL.S    shvoskip2
  12352.     MOVEQ    #0,D2
  12353. shvoskip2
  12354.     MOVE    D2,SampleVol
  12355.     JSR    Wait_4000
  12356.     BRA.S    ShowVol
  12357. shvoup    ADDQ.L    #1,D2
  12358.     BTST    #2,$DFF016
  12359.     BNE.S    shvoskip3
  12360.     ADD    #9,D2
  12361. shvoskip3
  12362.     CMP    #999,D2
  12363.     BLS.S    shvoskip2
  12364.     MOVE    #999,SampleVol
  12365.     JSR    Wait_4000
  12366. ShowVol    MOVE    #3711,TextOffset
  12367.     MOVE    SampleVol(PC),WordNumber
  12368.     BSR    Print3DecDigits
  12369.     LEA    PercentText(PC),A0
  12370.     MOVE    #1,TextLength
  12371.     BRA    ShowText2
  12372.  
  12373. PercentText    dc.b '%',0
  12374.  
  12375. DoChangeVol
  12376.     BSR    WaitForButtonUp
  12377.     BSR    StorePtrCol
  12378.     BSR    SetWaitPtrCol
  12379.     MOVEQ    #0,D3
  12380.     MOVE    SampleInfo(PC),D3
  12381.     BEQ    ErrorRestoreCol
  12382.     LSL    #1,D3
  12383.     SUBQ    #1,D3
  12384.     MOVE.L    si_pointer,D0
  12385.     BEQ    ErrorRestoreCol
  12386.     MOVE.L    D0,A1
  12387.     MOVE    SampleVol(PC),D0
  12388. dcvloop    MOVE.B    (A1),D1
  12389.     EXT    D1
  12390.     MULS    D0,D1
  12391.     DIVS    #100,D1
  12392.     CMP    #127,D1
  12393.     BLE.S    dcvskip
  12394.     MOVEQ    #127,D1
  12395. dcvskip    CMP    #-128,D1
  12396.     BGE.S    dcvskp2
  12397.     MOVEQ    #-128,D1
  12398. dcvskp2    MOVE.B    D1,(A1)+
  12399.     DBF    D3,dcvloop
  12400.     MOVE.L    si_pointer(PC),A1
  12401.     CLR    (A1)
  12402.     BSR    RestorePtrCol
  12403.     BRA    DisplaySample
  12404.  
  12405. Mix    BTST    #2,$DFF016
  12406.     BEQ    OldMix
  12407.     BSR    WaitForButtonUp
  12408.     BSR    StorePtrCol
  12409.     BSR    SetWaitPtrCol
  12410.     MOVE    #1,GetLineFlag
  12411.     MOVE    #4,MixCurPos
  12412. mixlopx    BSR    DisplayMix
  12413.     BSR    GetHexKey
  12414.     TST.B    D0
  12415.     BNE.S    mixnzro
  12416.     CMP.B    #68,MixChar
  12417.     BEQ    Mix2
  12418.     CMP.B    #69,MixChar
  12419.     BEQ    EndMix
  12420.     BTST    #2,$DFF016
  12421.     BEQ    EndMix
  12422. mixpchr    LEA    MixText(PC),A0
  12423.     LEA    FastHexTable+1,A1
  12424.     LSL    #1,D1
  12425.     MOVE    MixCurPos(PC),D0
  12426.     MOVE.B    (A1,D1.W),(A0,D0.W)
  12427. MixMoveRight
  12428.     MOVE    MixCurPos,D0
  12429.     ADDQ    #1,D0
  12430.     CMP    #6,D0
  12431.     BEQ.S    mmrp1
  12432.     CMP    #9,D0
  12433.     BEQ.S    mmrp2
  12434.     CMP    #15,D0
  12435.     BHS.S    mmrp3
  12436. mmrok    MOVE    D0,MixCurPos
  12437.     BRA    mixlopx
  12438. mmrp1    MOVEQ    #7,D0
  12439.     BRA.S    mmrok
  12440. mmrp2    MOVEQ    #13,D0
  12441.     BRA.S    mmrok
  12442. mmrp3    MOVEQ    #14,D0
  12443.     BRA.S    mmrok
  12444.  
  12445. mixnzro    CMP.B    #1,D0
  12446.     BEQ.S    MixMoveRight
  12447. MixMoveLeft
  12448.     MOVE    MixCurPos,D0
  12449.     SUBQ    #1,D0
  12450.     CMP    #4,D0
  12451.     BLO.S    mmlp1
  12452.     CMP    #6,D0
  12453.     BEQ.S    mmlp2
  12454.     CMP    #12,D0
  12455.     BEQ.S    mmlp3
  12456.     BRA.S    mmrok
  12457. mmlp1    MOVEQ    #4,D0
  12458.     BRA.S    mmrok
  12459. mmlp2    MOVEQ    #5,D0
  12460.     BRA.S    mmrok
  12461. mmlp3    MOVEQ    #8,D0
  12462.     BRA.S    mmrok
  12463.  
  12464. DisplayMix
  12465.     MOVE    #53,LineCurY
  12466.     MOVE    MixCurPos,D0
  12467.     LSL    #3,D0
  12468.     ADD    #132,D0
  12469.     MOVE    D0,LineCurX
  12470.     BSR    UpdateLineCurPos
  12471.     LEA    MixText(PC),A0
  12472.     MOVE    #1936,D1
  12473.     MOVEQ    #22,D0
  12474.     BSR    ShowText3
  12475.     JSR    Wait_4000
  12476.     JSR    Wait_4000
  12477.     JMP    Wait_4000
  12478.  
  12479. MixText    dc.b 'mix 01+02 to 03       '
  12480. MixChar    dc.b 0,0
  12481. MixCurPos dc.w 0
  12482. ToSam        dc.w 0
  12483. FromPtr1    dc.l 0
  12484. FromPtr2    dc.l 0
  12485. ToPtr        dc.l 0
  12486. MixPtr        dc.l 0
  12487. MixLength    dc.l 0
  12488.  
  12489. EndMix    CLR.B    RawKeyCode
  12490.     BSR    RestoreMix
  12491.     BRA    RestorePtrCol
  12492.  
  12493. RestoreMix
  12494.     CLR    GetLineFlag
  12495.     MOVE    #270,LineCurY
  12496.     CLR    LineCurX
  12497.     BSR    UpdateLineCurPos
  12498.     LEA    EditOpText3(PC),A0
  12499.     MOVE    #1936,D1
  12500.     MOVEQ    #22,D0
  12501.     BRA    ShowText3
  12502.  
  12503. Mix2    BSR    RestoreMix
  12504.     BSR    TurnOffVoices
  12505.     LEA    SamplePtrs,A2
  12506.     MOVEQ    #0,D0
  12507.     LEA    MixText+4(PC),A0
  12508.     BSR    HexToInteger2
  12509.     TST    D0
  12510.     BEQ    SamOutOfRange
  12511.     CMP    #$1F,D0
  12512.     BHI    SamOutOfRange
  12513.     LSL    #2,D0
  12514.     LEA    (A2,D0.W),A3
  12515.     MOVE.L    A3,FromPtr1
  12516.  
  12517.     MOVEQ    #0,D0
  12518.     LEA    MixText+7(PC),A0
  12519.     BSR    HexToInteger2
  12520.     TST    D0
  12521.     BEQ    SamOutOfRange
  12522.     CMP    #$1F,D0
  12523.     BHI    SamOutOfRange
  12524.     LSL    #2,D0
  12525.     LEA    (A2,D0.W),A3
  12526.     MOVE.L    A3,FromPtr2
  12527.  
  12528.     MOVEQ    #0,D0
  12529.     LEA    MixText+13(PC),A0
  12530.     BSR    HexToInteger2
  12531.     MOVE    D0,ToSam
  12532.     BEQ    SamOutOfRange
  12533.     CMP    #$1F,D0
  12534.     BHI    SamOutOfRange
  12535.     LSL    #2,D0
  12536.     LEA    (A2,D0.W),A3
  12537.     MOVE.L    A3,ToPtr
  12538.  
  12539.     MOVE.L    FromPtr1,A1
  12540.     MOVE.L    FromPtr2,A2
  12541.     MOVE.L    124(A1),D1
  12542.     MOVE.L    124(A2),D2
  12543.     CMP.L    D1,D2
  12544.     BLO.S    mixnswp
  12545.     EXG    D1,D2
  12546. mixnswp    TST.L    D1
  12547.     BEQ    SamEmptyError ; Both samples had length=0
  12548.     MOVE.L    D1,D0
  12549.     AND.L    #$FFFF,D0
  12550.     MOVE.L    D0,MixLength
  12551.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  12552.     MOVE.L    4.W,A6
  12553.     JSR    LVOAllocMem(A6)
  12554.     MOVE.L    D0,MixPtr
  12555.     BEQ    SamMemError ; No memory for new sample...
  12556.  
  12557.     LEA    mixingtext(PC),A0
  12558.     BSR    ShowStatusText
  12559.     MOVE.L    FromPtr1(PC),A1
  12560.     MOVE.L    124(A1),D1
  12561.     MOVE.L    (A1),A1
  12562.     MOVE.L    FromPtr2(PC),A2
  12563.     MOVE.L    124(A2),D2
  12564.     MOVE.L    (A2),A2
  12565.     MOVE.L    MixPtr(PC),A3
  12566.     MOVE.L    MixLength,D3
  12567.     TST    D1
  12568.     BEQ.S    mixnd1
  12569.     SUBQ    #1,D1
  12570. mixnd1    TST    D2
  12571.     BEQ.S    mixnd2
  12572.     SUBQ    #1,D2
  12573. mixnd2    SUBQ    #1,D3
  12574.  
  12575. mixlop2    MOVE.B    (A1),D4
  12576.     EXT    D4
  12577.     MOVE.B    (A2),D0
  12578.     EXT    D0
  12579.     ADD    D4,D0
  12580.     TST.B    HalfClipFlag
  12581.     BEQ    mixhalf
  12582.     CMP    #127,D0
  12583.     BLE.S    mixnbig
  12584.     MOVEQ    #127,D0
  12585. mixnbig    CMP    #-128,D0
  12586.     BGE    mixokok
  12587.     MOVEQ    #-128,D0
  12588.     BRA    mixokok
  12589. mixhalf    ASR    #1,D0
  12590. mixokok    MOVE.B    D0,(A3)+
  12591.  
  12592.     TST    D1
  12593.     BEQ.S    zerd1
  12594.     ADDQ.L    #1,A1
  12595.     SUBQ    #1,D1
  12596.     BNE.S    zerd1
  12597.     SUB.L    A1,A1
  12598.  
  12599. zerd1    TST    D2
  12600.     BEQ.S    zerd2
  12601.     ADDQ.L    #1,A2
  12602.     SUBQ    #1,D2
  12603.     BNE.S    zerd2
  12604.     SUB.L    A2,A2
  12605.  
  12606. zerd2    DBF    D3,mixlop2
  12607.     MOVE    ToSam(PC),InsNum
  12608.     BSR    FreeSample
  12609.     MOVE.L    ToPtr(PC),A0
  12610.     MOVE.L    MixPtr(PC),A1
  12611.     CLR    (A1)
  12612.     MOVE.L    A1,(A0)
  12613.     MOVE.L    MixLength(PC),124(A0)
  12614.     MOVE.L    SongDataPtr(PC),A0
  12615.     MOVE    ToSam(PC),D0
  12616.     SUBQ    #1,D0
  12617.     MULU    #30,D0
  12618.     LEA    20(A0,D0.W),A0
  12619.     MOVE.L    MixLength(PC),D0
  12620.     LSR    #1,D0
  12621.     MOVE    D0,22(A0)
  12622.     MOVE    #$0040,24(A0)
  12623.     MOVE    #$0000,26(A0)
  12624.     MOVE    #$0001,28(A0)
  12625.     BSR    RestorePtrCol
  12626.     BSR    ShowAllRight
  12627.     BSR    ShowSampleInfo
  12628.     BRA    DisplaySample
  12629.  
  12630. SamOutOfRange
  12631.     LEA    mixerrtext1(PC),A0
  12632.     BSR    ShowStatusText
  12633.     BRA    ErrorRestoreCol
  12634. SamEmptyError
  12635.     LEA    mixerrtext2(PC),A0
  12636.     BSR    ShowStatusText
  12637.     BRA    ErrorRestoreCol
  12638. SamMemError
  12639.     LEA    mixerrtext3(PC),A0
  12640.     BSR    ShowStatusText
  12641.     BRA    ErrorRestoreCol
  12642. OutOfMemErr
  12643.     LEA    mixerrtext3(PC),A0
  12644.     BSR    ShowStatusText
  12645.     BSR    SetErrorPtrCol
  12646.     MOVEQ    #0,D0
  12647.     RTS
  12648.  
  12649. mixerrtext1    dc.b 'not range 01-1F !',0
  12650. mixerrtext2    dc.b 'empty samples !!!',0
  12651. mixerrtext3    dc.b 'out of memory !!!',0
  12652. mixingtext    dc.b 'mixing samples...',0
  12653.  
  12654. OldMix    MOVE.L    SamplePos(PC),FlangePos
  12655. DoMix    BSR    StorePtrCol
  12656.     BSR    SetWaitPtrCol
  12657.     MOVEQ    #0,D2
  12658.     MOVE    SampleInfo(PC),D2 ; 22(A0)
  12659.     BEQ    Return2
  12660.     LSL    #1,D2
  12661.     MOVE.L    si_pointer(PC),D0
  12662.     BEQ    ErrorRestoreCol
  12663.     BSR    AllocBuffer
  12664.     MOVE.L    D0,A2
  12665.     MOVE.L    D0,A3
  12666.     MOVE.L    A1,A4
  12667.     ADD.L    D2,A3
  12668.     ADD.L    FlangePos(PC),A2
  12669.     CLR.L    ModOffset
  12670.     CLR.L    ModPos
  12671.     MOVEQ    #-1,D7
  12672. mixloop    ADDQ.L    #1,D7
  12673.     CMP.L    A3,A2
  12674.     BHS    mixskip
  12675.     MOVE.L    MarkStartOfs(PC),D0
  12676.     BMI.S    omxget
  12677.     MOVE.L    MarkEndOfs(PC),D1
  12678.     CMP.L    D0,D1
  12679.     BEQ.S    omxget
  12680.     CMP.L    D0,D7
  12681.     BLO.S    omxok2
  12682.     CMP.L    D1,D7
  12683.     BHI.S    omxok2
  12684. omxget    MOVE.B    (A2),D0
  12685.     EXT    D0
  12686.     MOVE.B    (A1),D1
  12687.     EXT    D1
  12688.     ADD    D1,D0
  12689.     TST.B    HalfClipFlag
  12690.     BEQ.S    omxhalf
  12691.     CMP    #127,D0
  12692.     BLE.S    omxnbig
  12693.     MOVEQ    #127,D0
  12694. omxnbig    CMP    #-128,D0
  12695.     BGE.S    omxokok
  12696.     MOVEQ    #-128,D0
  12697.     BRA.S    omxokok
  12698. omxhalf    ASR    #1,D0
  12699. omxokok    MOVE.B    D0,(A2)+
  12700.     BSR    UpdateMod
  12701.     BRA.S    mixloop
  12702. omxok2    ADDQ.L    #1,A2
  12703.     BSR    UpdateMod
  12704.     BRA.S    mixloop
  12705.  
  12706. mixskip    MOVE.L    si_pointer(PC),A1
  12707.     CLR    (A1)
  12708.     BSR    FreeBuffer
  12709.     BSR    RestorePtrCol
  12710.     BSR    WaitForButtonUp
  12711.     TST    DispOrRedraw
  12712.     BEQ    DisplaySample
  12713.     CLR    DispOrRedraw
  12714.     BRA    RedrawSample
  12715.  
  12716. DispOrRedraw    dc.w 0
  12717.  
  12718. AllocBuffer
  12719.     MOVE.L    D0,D7
  12720.     MOVE.L    D2,D0
  12721.     MOVE.L    D2,BufMemSize
  12722.     MOVE.L    #MEMF_CLEAR,D1
  12723.     MOVE.L    4.W,A6
  12724.     JSR    LVOAllocMem(A6)
  12725.     MOVE.L    D0,BufMemPtr
  12726.     BEQ    OutOfMemErr
  12727.     MOVE.L    D7,A0
  12728.     MOVE.L    D0,A1
  12729.     MOVE.L    BufMemSize(PC),D0
  12730.     SUBQ.L    #1,D0
  12731. albloop    MOVE.B    (A0)+,(A1)+
  12732.     DBF    D0,albloop
  12733.     MOVE.L    BufMemPtr(PC),A1
  12734.     MOVE.L    D7,D0
  12735.     RTS
  12736.  
  12737. FreeBuffer
  12738.     MOVE.L    BufMemPtr(PC),D0
  12739.     BEQ    Return2
  12740.     MOVE.L    D0,A1
  12741.     MOVE.L    BufMemSize(PC),D0
  12742.     MOVE.L    4.W,A6
  12743.     JSR    LVOFreeMem(A6)
  12744.     CLR.L    BufMemPtr
  12745.     RTS
  12746.  
  12747. Echo    MOVE.L    SamplePos(PC),FlangePos
  12748.     BSR    WaitForButtonUp
  12749.     BSR    StorePtrCol
  12750.     BSR    SetWaitPtrCol
  12751.     MOVEQ    #0,D2
  12752.     MOVE    SampleInfo(PC),D2 ; 22(A0)
  12753.     BEQ    ErrorRestoreCol
  12754.     LSL    #1,D2
  12755.     MOVE.L    si_pointer(PC),D0
  12756.     BEQ    ErrorRestoreCol
  12757.     MOVE.L    D0,A1
  12758.     MOVE.L    D0,A2
  12759.     MOVE.L    D0,A3
  12760.     MOVE.L    D0,A4
  12761.     ADD.L    D2,A3
  12762.     ADD.L    FlangePos(PC),A2
  12763.     CLR.L    ModOffset
  12764.     CLR.L    ModPos
  12765. flaloop    CMP.L    A3,A2
  12766.     BHS    flaskip
  12767.     MOVE.B    (A2),D0
  12768.     EXT    D0
  12769.     MOVE.B    (A1),D1
  12770.     EXT    D1
  12771.     ADD    D1,D0
  12772.     ASR    #1,D0
  12773.     MOVE.B    D0,(A2)+
  12774.     BSR    UpdateMod
  12775.     BRA    flaloop
  12776. flaskip    MOVE.L    si_pointer(PC),A1
  12777.     CLR    (A1)
  12778.     BSR    RestorePtrCol
  12779.     TST.B    HalfClipFlag
  12780.     BEQ    DisplaySample
  12781.     MOVE    SampleVol,-(SP)
  12782.     MOVE    #200,SampleVol
  12783.     BSR    DoChangeVol
  12784.     MOVE    (SP)+,SampleVol
  12785.     BRA    DisplaySample
  12786.  
  12787. Filter2    MOVE    #1,DispOrRedraw
  12788. Filter    CLR.B    RawKeyCode
  12789.     LEA    FilteringText,A0
  12790.     BSR    ShowStatusText
  12791.     MOVE.L    #1,FlangePos
  12792.     MOVE.B    ModSpeed(PC),-(SP)
  12793.     MOVE.B    HalfClipFlag,-(SP)
  12794.     CLR.B    ModSpeed
  12795.     CLR.B    HalfClipFlag
  12796.     BSR    DoMix
  12797.     MOVE.B    (SP)+,HalfClipFlag
  12798.     MOVE.B    (SP)+,ModSpeed
  12799.     BRA    ShowAllRight
  12800.  
  12801. FilteringText    dc.b 'filtering',0
  12802.  
  12803. Boost    BSR.S    Boost3
  12804.     BRA    DisplaySample
  12805. Boost2    BSR.S    Boost3
  12806.     BRA    RedrawSample
  12807. Boost3    CLR.B    RawKeyCode
  12808.     BSR    WaitForButtonUp
  12809.     BSR    StorePtrCol
  12810.     BSR    SetWaitPtrCol
  12811.     LEA    BoostingText,A0
  12812.     BSR    ShowStatusText
  12813.     MOVEQ    #0,D3
  12814.     MOVE    SampleInfo(PC),D3
  12815.     BEQ    booend
  12816.     LSL    #1,D3
  12817.     SUBQ    #1,D3
  12818.     MOVE.L    si_pointer(PC),D0
  12819.     BEQ    booend
  12820.     MOVE.L    D0,A1
  12821.     MOVE.L    MarkStartOfs(PC),D0
  12822.     BMI.S    booskp1
  12823.     MOVE.L    MarkEndOfs(PC),D1
  12824.     SUB.L    D0,D1
  12825.     BEQ.S    booskp1
  12826.     MOVE.L    D1,D3
  12827.     MOVE.L    SamStart(PC),A1
  12828.     ADD.L    D0,A1
  12829. booskp1    MOVEQ    #0,D0
  12830. booloop    MOVE.B    (A1),D1
  12831.     EXT    D1
  12832.     MOVE    D1,D2
  12833.     SUB    D0,D1
  12834.     MOVE    D2,D0
  12835.     TST    D1
  12836.     BMI    booneg
  12837.     ASR    #2,D1
  12838.     ADD    D1,D2
  12839.     BRA    booskip
  12840. booneg    NEG    D1
  12841.     ASR    #2,D1
  12842.     SUB    D1,D2
  12843. booskip    CMP    #127,D2
  12844.     BLE    booskp2
  12845.     MOVEQ    #127,D2
  12846. booskp2    CMP    #-128,D2
  12847.     BGE    booskp3
  12848.     MOVEQ    #-128,D2
  12849. booskp3    MOVE.B    D2,(A1)+
  12850.     DBF    D3,booloop
  12851.     MOVE.L    si_pointer(PC),A1
  12852.     CLR    (A1)
  12853. booend    BSR    ShowAllRight
  12854.     BRA    RestorePtrCol
  12855.  
  12856. BoostingText    dc.b 'boosting',0,0
  12857.  
  12858. XFade    JSR    WaitForButtonUp
  12859.     BSR    StorePtrCol
  12860.     BSR    SetWaitPtrCol
  12861.     MOVEQ    #0,D2
  12862.     MOVE    SampleInfo(PC),D2 ; 22(A0)
  12863.     BEQ    ErrorRestoreCol
  12864.     ADD    D2,D2
  12865.     MOVE.L    si_pointer(PC),D0
  12866.     BEQ    ErrorRestoreCol
  12867.     MOVE.L    D0,A1
  12868.     MOVE.L    D0,A2
  12869.     ADD.L    D2,A2
  12870. xfaloop    MOVE.B    (A1),D0
  12871.     EXT    D0
  12872.     MOVE.B    -(A2),D1
  12873.     EXT    D1
  12874.     ADD    D1,D0
  12875.     TST.B    HalfClipFlag
  12876.     BEQ    xfahalf
  12877.     CMP    #127,D0
  12878.     BLE    xfanbig
  12879.     MOVEQ    #127,D0
  12880. xfanbig    CMP    #-128,D0
  12881.     BGE    xfaokok
  12882.     MOVEQ    #-128,D0
  12883.     BRA    xfaokok
  12884. xfahalf    ASR    #1,D0
  12885. xfaokok    MOVE.B    D0,(A1)+
  12886.     MOVE.B    D0,(A2)
  12887.     CMP.L    A2,A1
  12888.     BLO.S    xfaloop
  12889.     MOVE.L    si_pointer(PC),A1
  12890.     CLR    (A1)
  12891.     BSR    RestorePtrCol
  12892.     BRA    DisplaySample
  12893.  
  12894. Backwards
  12895.     JSR    WaitForButtonUp
  12896.     JSR    StorePtrCol
  12897.     JSR    SetWaitPtrCol
  12898.     MOVEQ    #0,D2
  12899.     MOVE    22(A5),D2
  12900.     BEQ    ErrorRestoreCol
  12901.     MOVE.L    si_pointer(PC),D0
  12902.     BEQ    ErrorRestoreCol
  12903.     MOVE.L    D0,A1
  12904.     MOVE.L    D0,A2
  12905.     ADD.L    D2,D2
  12906.     ADD.L    D2,A2
  12907.     MOVE.L    MarkStartOfs(PC),D0
  12908.     BMI.S    bacloop
  12909.     MOVE.L    MarkEndOfs(PC),D1
  12910.     SUB.L    D0,D1
  12911.     BEQ.S    bacloop
  12912.     MOVE.L    SamStart(PC),A1
  12913.     ADD.L    D0,A1
  12914.     MOVE.L    A1,A2
  12915.     ADD.L    D1,A2
  12916. bacloop    MOVE.B    (A1),D0
  12917.     MOVE.B    -(A2),(A1)+
  12918.     MOVE.B    D0,(A2)
  12919.     CMP.L    A2,A1
  12920.     BLO.S    bacloop
  12921.     MOVE.L    si_pointer(PC),A1
  12922.     CLR    (A1)
  12923.     BSR    RestorePtrCol
  12924.     BRA    DisplaySample
  12925.  
  12926. UpSample
  12927.     JSR    WaitForButtonUp
  12928.     LEA    UpsampleText,A0
  12929.     JSR    AreYouSure
  12930.     BNE    Return2
  12931.     BSR    TurnOffVoices
  12932.     JSR    StorePtrCol
  12933.     JSR    SetWaitPtrCol
  12934.     MOVE    InsNum(PC),D0
  12935.     LSL    #2,D0
  12936.     LEA    SamplePtrs(PC),A0
  12937.     LEA    (A0,D0.W),A0
  12938.     MOVE.L    124(A0),D3
  12939.     CMP.L    #2,D3
  12940.     BLS    ErrorRestoreCol2
  12941.     MOVE.L    (A0),D0
  12942.     BEQ    ErrorRestoreCol2
  12943.     MOVE.L    D0,A2
  12944.     MOVE.L    D0,A4
  12945.     MOVE.L    D3,D4
  12946.     LSR.L    #1,D3
  12947.     BCLR    #0,D3
  12948.     MOVE.L    D3,D0
  12949.     MOVEQ    #MEMF_CHIP,D1
  12950.     MOVE.L    4.W,A6
  12951.     JSR    LVOAllocMem(A6)
  12952.     TST.L    D0
  12953.     BEQ.S    upserro
  12954.     MOVE.L    D0,A3
  12955.     MOVE.L    D0,D2
  12956.     MOVE.L    D3,D5
  12957.     SUBQ.L    #1,D3
  12958. upsloop    MOVE.B    (A2)+,(A3)+
  12959.     ADDQ.L    #1,A2
  12960.     DBF    D3,upsloop
  12961.     MOVE.L    A4,A1
  12962.     MOVE.L    D4,D0
  12963.     MOVE.L    4.W,A6
  12964.     JSR    LVOFreeMem(A6)
  12965.     MOVE    InsNum(PC),D0
  12966.     LSL    #2,D0
  12967.     LEA    SamplePtrs(PC),A0
  12968.     LEA    (A0,D0.W),A0
  12969.     MOVE.L    D2,(A0)
  12970.     MOVE.L    D5,124(A0)
  12971.     MOVE.L    D2,A0
  12972.     CLR    (A0)
  12973.     MOVE    22(A5),D0
  12974.     LSR    #1,D0
  12975.     MOVE    D0,22(A5)
  12976.     MOVE    26(A5),D0
  12977.     LSR    #1,D0
  12978.     MOVE    D0,26(A5)
  12979.     MOVE    28(A5),D0
  12980.     LSR    #1,D0
  12981.     BNE    upsskip2
  12982.     MOVEQ    #1,D0
  12983. upsskip2
  12984.     MOVE    D0,28(A5)
  12985.     BSR    ShowSampleInfo
  12986.     JSR    WaitForButtonUp
  12987.     JSR    RestorePtrCol
  12988.     BRA    RedrawSample
  12989.  
  12990. upserro    JSR    RestorePtrCol
  12991.     BRA    OutOfMemErr
  12992.  
  12993. DownSample
  12994.     JSR    WaitForButtonUp
  12995.     TST    InsNum
  12996.     BEQ    NotSampleNull
  12997.     LEA    DownSampleText,A0
  12998.     JSR    AreYouSure
  12999.     BNE    Return2
  13000.     BSR    TurnOffVoices
  13001.     JSR    StorePtrCol
  13002.     JSR    SetWaitPtrCol
  13003.     MOVE.L    si_pointer(PC),D0
  13004.     BEQ    ErrorRestoreCol2
  13005.     MOVEQ    #0,D0
  13006.     MOVE    SampleInfo(PC),D0
  13007.     BEQ    ErrorRestoreCol2
  13008.     LSL.L    #1,D0
  13009.     CMP.L    #$FFFE,D0
  13010.     BHI    ErrorRestoreCol2
  13011.     LSL.L    #1,D0
  13012.     CMP.L    #$FFFE,D0
  13013.     BLS    dnsskip
  13014.     MOVE.L    #$FFFE,D0
  13015. dnsskip    MOVE.L    D0,BufMemSize
  13016.     MOVEQ    #MEMF_CHIP,D1
  13017.     MOVE.L    4.W,A6
  13018.     JSR    LVOAllocMem(A6)
  13019.     MOVE.L    D0,BufMemPtr
  13020.     BEQ    SamMemError
  13021.     MOVE.L    si_pointer(PC),A1
  13022.     MOVE.L    D0,A2
  13023.     MOVE.L    BufMemSize,D3
  13024.     LSR.L    #1,D3
  13025.     SUBQ.L    #1,D3
  13026. dnsloop    MOVE.B    (A1)+,D0
  13027.     MOVE.B    D0,(A2)+
  13028.     MOVE.B    D0,(A2)+
  13029.     DBF    D3,dnsloop
  13030.     BSR    FreeSample
  13031.     LEA    SamplePtrs,A0
  13032.     MOVE    InsNum(PC),D0
  13033.     LSL    #2,D0
  13034.     MOVE.L    BufMemPtr,(A0,D0.W)
  13035.     MOVE.L    BufMemSize,124(A0,D0.W)
  13036.     MOVE    22(A5),D0
  13037.     LSL    #1,D0
  13038.     CMP    #$7FFF,D0
  13039.     BLS    dnsok1
  13040.     MOVE    #$7FFF,D0
  13041. dnsok1    MOVE    D0,22(A5)
  13042.     MOVE    26(A5),D0
  13043.     LSL    #1,D0
  13044.     CMP    #$7FFF,D0
  13045.     BLS    dnsok2
  13046.     MOVE    #$7FFF,D0
  13047. dnsok2    MOVE    D0,26(A5)
  13048.     MOVE    28(A5),D0
  13049.     CMP    #1,D0
  13050.     BEQ    dnsok3
  13051.     LSL    #1,D0
  13052.     CMP    #$7FFF,D0
  13053.     BLS    dnsok3
  13054.     MOVE    #$7FFF,D0
  13055. dnsok3    MOVE    D0,28(A5)
  13056.     BSR    ShowSampleInfo
  13057.     JSR    WaitForButtonUp
  13058.     JSR    RestorePtrCol
  13059.     BSR    RedrawSample
  13060.     RTS
  13061.  
  13062. SamplePos    dc.l    0
  13063. SampleVol    dc.w    100
  13064. FlangePos    dc.l    0
  13065. ModSpeed    dc.b    0
  13066. HalfClipFlag    dc.b    0
  13067. ModPos        dc.l    0
  13068. ModOffset    dc.l    0
  13069. BufMemPtr    dc.l    0
  13070. BufMemSize    dc.l    0
  13071.  
  13072.  
  13073.  
  13074.  
  13075. ErrorRestoreCol2
  13076.     JMP    ErrorRestoreCol
  13077.  
  13078.  
  13079.  
  13080. ;---- Save Song ----
  13081. SaveSong
  13082.     BSR    StopIt
  13083.     CLR.B    RawKeyCode
  13084.     MOVE.L    SongDataPtr(PC),A0
  13085.     LEA    SampleLengthAdd(PC),A1
  13086.     MOVEQ    #0,D0
  13087.     MOVEQ    #2,D1
  13088. sadloop    MOVE    (A1,D1.W),D2
  13089.     ADD    D2,42(A0,D0.W)
  13090.     ADD    #30,D0
  13091.     ADDQ    #2,D1
  13092.     CMP    #62,D1
  13093.     BNE    sadloop
  13094.  
  13095.     LEA    sd_pattpos(A0),A0
  13096.     MOVEQ    #0,D0
  13097.     MOVEQ    #0,D1
  13098.     MOVEQ    #0,D2
  13099.     CLR    HighPattNum
  13100. ssloop    MOVE.B    0(A0,D0.W),D1
  13101.     ADDQ    #1,D0
  13102.     CMP    #128,D0
  13103.     BHI    DoSaveSong
  13104.     MOVE    HighPattNum(PC),D2
  13105.     CMP    D2,D1
  13106.     BLS    ssloop
  13107.     MOVE    D1,HighPattNum
  13108.     BRA    ssloop
  13109.  
  13110. DoSaveSong
  13111.     LEA    SongsPath2,A0
  13112.     JSR    CopyPath
  13113.     MOVE.L    SongDataPtr(PC),A0
  13114.     MOVEQ    #19,D0
  13115. dssloop    MOVE.B    (A0)+,(A1)+
  13116.     DBF    D0,dssloop
  13117.     MOVE.L    #FileName,FileNamePtr
  13118.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  13119.     MOVE.L    #1084,DiskDataLength
  13120.     MOVEQ    #0,D0
  13121.     MOVE    HighPattNum,D0
  13122.     ADDQ.L    #1,D0
  13123.     LSL.L    #8,D0
  13124.     LSL.L    #2,D0
  13125.     ADD.L    D0,DiskDataLength
  13126.     MOVE.B    PackMode,D0
  13127.     BTST    #0,D0
  13128.     BEQ    dssnocr
  13129.     LEA    CrunchingText(PC),A0
  13130.     BSR    ShowStatusText
  13131.     BSR    Cruncher
  13132. dssnocr    BSR    DoSaveData
  13133.     MOVE.B    PackMode,D0
  13134.     BTST    #0,D0
  13135.     BEQ    dssnoc2
  13136.     LEA    DecrunchingText(PC),A0
  13137.     BSR    ShowStatusText
  13138.     BSR    Decruncher
  13139. dssnoc2    MOVE.L    SongDataPtr(PC),A0
  13140.     LEA    SampleLengthAdd(PC),A1
  13141.     MOVEQ    #0,D0
  13142.     MOVEQ    #2,D1
  13143. ssuloop    MOVE    (A1,D1.W),D2
  13144.     SUB    D2,42(A0,D0.W)
  13145.     ADD    #30,D0
  13146.     ADD    #2,D1
  13147.     CMP    #62,D1
  13148.     BNE    ssuloop
  13149.     BSR    ShowAllRight
  13150. SetNormalPtrCol2
  13151.     JMP    SetNormalPtrCol
  13152.  
  13153. Cruncher
  13154.     BSR    SetNormalPtrCol2
  13155.     MOVE.L    SongDataPtr(PC),A0
  13156.     MOVE.L    A0,A1
  13157.     LEA    12(A1),A1
  13158.     MOVE.L    A1,SongPlus12Ptr
  13159.     MOVE.L    A0,A1
  13160.     ADD.L    #70716,A1    ; hoeh...
  13161.     MOVE.L    A1,SongPlus70kPtr
  13162.     MOVE.L    A0,A1
  13163.     ADD.L    #70716,A1
  13164.     SUB.L    DiskDataLength(PC),A1
  13165.     MOVE.L    A1,EndOfSongPtr
  13166.     MOVE.L    DiskDataLength(PC),RealSongLength
  13167.     MOVE.L    SongDataPtr(PC),A0
  13168.     ADD.L    DiskDataLength(PC),A0
  13169.     MOVE.L    SongDataPtr(PC),A1
  13170.     ADD.L    #70716,A1
  13171.     MOVE.L    DiskDataLength(PC),D0
  13172. cloop    MOVE.B    -(A0),-(A1)
  13173.     SUBQ.L    #1,D0
  13174.     BNE    cloop
  13175.     BSR    DoCrunch
  13176.     SUB.L    SongPlus12Ptr(PC),A2
  13177.     MOVE.L    A2,D0
  13178.     MOVE.L    D0,CrunchedSongLength
  13179.     MOVE.L    D0,D1
  13180.     ADD.L    SongPlus12Ptr(PC),D1
  13181.     MOVE.L    D1,DontKnowWhat
  13182.     MOVE.L    SongDataPtr(PC),A0
  13183.     MOVE.L    #'PACK',(A0)
  13184.     MOVE.L    CrunchedSongLength,4(A0)
  13185.     MOVE.L    RealSongLength(PC),8(A0)
  13186.     MOVE.L    SongDataPtr(PC),DiskDataPtr
  13187.     MOVE.L    CrunchedSongLength(PC),D0
  13188.     ADD.L    #12,D0
  13189.     MOVE.L    D0,DiskDataLength
  13190.     RTS
  13191.  
  13192. EndOfSongPtr        dc.l    0
  13193. SongPlus70kPtr        dc.l    0
  13194. RealSongLength        dc.l    0
  13195. SongPlus12Ptr        dc.l    0
  13196. DontKnowWhat        dc.l    0
  13197. CrunchedSongLength    dc.l    0
  13198.  
  13199. DoCrunch
  13200.     MOVE.L    EndOfSongPtr(PC),A0
  13201.     MOVE.L    SongPlus70kPtr(PC),A1
  13202.     MOVE.L    SongPlus12Ptr(PC),A2
  13203.     MOVEQ    #1,D2
  13204.     CLR    D1
  13205. dcloop    BSR    DoCrunch2
  13206.     TST.B    D0
  13207.     BEQ    dcskip
  13208.     ADDQ    #1,D1
  13209.     CMP    #$0108,D1
  13210.     BNE    dcskip
  13211.     BSR    DoCrunch6
  13212. dcskip    CMP.L    A0,A1
  13213.     BGT    dcloop
  13214.     BSR    DoCrunch6
  13215.     BRA    DoCrunch8
  13216.  
  13217. DoCrunch2
  13218.     MOVE.L    A0,A3
  13219.     LEA    127(A3),A3
  13220.     CMP.L    A1,A3
  13221.     BLE    dc2skip
  13222.     MOVE.L    A1,A3
  13223. dc2skip    MOVEQ    #1,D5
  13224.     MOVE.L    A0,A5
  13225.     ADDQ.L    #1,A5
  13226. dc2_1    MOVE.B    (A0),D3
  13227.     MOVE.B    1(A0),D4
  13228.     MOVE    D3,$DFF1A2
  13229. dc2loop    CMP.B    (A5)+,D3
  13230.     BNE    dc2skip2
  13231.     CMP.B    (A5),D4
  13232.     BEQ    DoCrunch3
  13233. dc2skip2
  13234.     CMP.L    A5,A3
  13235.     BGT    dc2loop
  13236.     BRA    dc4_3
  13237.  
  13238. DoCrunch3
  13239.     SUBQ.L    #1,A5
  13240.     MOVE.L    A0,A4
  13241. dc3loop    MOVE.B    (A4)+,D3
  13242.     CMP.B    (A5)+,D3
  13243.     BNE    dc3skip
  13244.     CMP.L    A5,A3
  13245.     BGT    dc3loop
  13246. dc3skip    MOVE.L    A4,D3
  13247.     SUB.L    A0,D3
  13248.     SUBQ.L    #1,D3
  13249.     CMP.L    D3,D5
  13250.     BGE    dc4_2
  13251.     MOVE.L    A5,D4
  13252.     SUB.L    A0,D4
  13253.     SUB.L    D3,D4
  13254.     SUBQ.L    #1,D4
  13255.     CMP.L    #4,D3
  13256.     BLE    DoCrunch4
  13257.     MOVEQ    #6,D6
  13258.     CMP.L    #$00000101,D3
  13259.     BLT    dc3skip2
  13260.     MOVE    #$0100,D3
  13261. dc3skip2
  13262.     BRA    dc4_1
  13263.  
  13264. DoCrunch4
  13265.     MOVE    D3,D6
  13266.     SUBQ    #2,D6
  13267.     LSL    #1,D6
  13268. dc4_1    LEA    CrunchData3(PC),A6
  13269.     CMP    0(A6,D6.W),D4
  13270.     BGE    dc4_2
  13271.     MOVE.L    D3,D5
  13272.     MOVE.L    D4,CrunchData1
  13273.     MOVE.B    D6,CrunchData2
  13274. dc4_2    CMP.L    A5,A3
  13275.     BGT    dc2_1
  13276. dc4_3    CMP.L    #1,D5
  13277.     BEQ    DoCrunch5
  13278.     BSR    DoCrunch6
  13279.     MOVE.B    CrunchData2(PC),D6
  13280.     MOVE.L    CrunchData1(PC),D3
  13281.     MOVE    8(A6,D6.W),D0
  13282.     BSR    DoCrunch7
  13283.     MOVE    $0010(A6,D6.W),D0
  13284.     BEQ    dc4skip
  13285.     MOVE.L    D5,D3
  13286.     SUBQ    #1,D3
  13287.     BSR    DoCrunch7
  13288. dc4skip    MOVE    $0018(A6,D6.W),D0
  13289.     MOVE    $0020(A6,D6.W),D3
  13290.     BSR    DoCrunch7
  13291.     ADDQ    #1,$0028(A6,D6.W)
  13292.     ADD.L    D5,A0
  13293.     CLR.B    D0
  13294.     RTS
  13295.  
  13296. DoCrunch5
  13297.     MOVE.B    (A0)+,D3
  13298.     MOVEQ    #8,D0
  13299.     BSR    DoCrunch7
  13300.     MOVEQ    #1,D0
  13301.     RTS
  13302.  
  13303. CrunchData1    dc.l    0
  13304. CrunchData2    dc.b    0,0
  13305. CrunchData3    dc.w    $0100,$0200,$0400,$1000,8,9,10,8
  13306.         dc.w    0,0,0,8,2,3,3,3,1,4,5,6,0,0,0,0
  13307. CrunchData4    dc.w    0
  13308. CrunchData5    dc.w    0
  13309.  
  13310. DoCrunch6
  13311.     TST    D1
  13312.     BEQ    Return2
  13313.     MOVE    D1,D3
  13314.     CLR    D1
  13315.     CMP    #9,D3
  13316.     BGE    dc6_2
  13317.     ADDQ    #1,CrunchData4
  13318.     SUBQ    #1,D3
  13319.     MOVEQ    #5,D0
  13320.     BRA    DoCrunch7
  13321.  
  13322. dc6_2    ADDQ    #1,CrunchData5
  13323.     SUB    #9,D3
  13324.     OR    #$0700,D3
  13325.     MOVEQ    #11,D0
  13326. DoCrunch7
  13327.     SUBQ    #1,D0
  13328. dc7loop    LSR.L    #1,D3
  13329.     ROXL.L    #1,D2
  13330.     BCS    dc8_2
  13331.     DBF    D0,dc7loop
  13332.     RTS
  13333.  
  13334. DoCrunch8
  13335.     CLR    D0
  13336. dc8_2    MOVE.L    D2,(A2)+
  13337.     MOVEQ    #1,D2
  13338.     DBF    D0,dc7loop
  13339.     RTS
  13340.  
  13341.  
  13342. Decruncher
  13343.     MOVE.L    SongDataPtr(PC),A0
  13344.     LEA    12(A0),A0
  13345.     MOVE.L    EndOfSongPtr(PC),A1
  13346.     MOVE.L    CrunchedSongLength(PC),D0
  13347.     MOVE.L    RealSongLength(PC),D1
  13348.     BSR    DoDecrunch
  13349.     MOVE.L    EndOfSongPtr(PC),A0
  13350.     MOVE.L    SongDataPtr(PC),A1
  13351.     MOVE.L    RealSongLength(PC),D0
  13352. ddcloop    MOVE.B    (A0)+,(A1)+
  13353.     SUBQ.L    #1,D0
  13354.     BNE    ddcloop
  13355.     MOVE.L    SongDataPtr(PC),A0
  13356.     ADD.L    #$0001143C,A0
  13357.     MOVE.L    SongDataPtr(PC),A1
  13358.     ADD.L    RealSongLength(PC),A1
  13359.     SUB.L    A1,A0
  13360.     MOVE.L    A0,D0
  13361. ddcloop2
  13362.     CLR.B    (A1)+
  13363.     SUBQ.L    #1,D0
  13364.     BNE    ddcloop2
  13365.     RTS
  13366.  
  13367. DoDecrunch
  13368.     ADD.L    D0,A0
  13369.     MOVE.L    D1,A2
  13370.     ADD.L    A1,A2
  13371.     MOVE.L    -(A0),D0
  13372. dec_1    LSR.L    #1,D0
  13373.     BNE.S    decskip
  13374.     BSR.S    dec5
  13375. decskip    BCS.S    dec3
  13376.     MOVEQ    #8,D1
  13377.     MOVEQ    #1,D3
  13378.     LSR.L    #1,D0
  13379.     BNE.S    decskip2
  13380.     BSR.S    dec5
  13381. decskip2
  13382.     BCS.S    dec4_1
  13383.     MOVEQ    #3,D1
  13384.     CLR    D4
  13385. dec_2    BSR.S    dec6
  13386.     MOVE    D2,D3
  13387.     ADD    D4,D3
  13388. decloop1
  13389.     MOVEQ    #7,D1
  13390. decloop2
  13391.     LSR.L    #1,D0
  13392.     BNE.S    decskip3
  13393.     BSR.S    dec5
  13394. decskip3
  13395.     ROXL.L    #1,D2
  13396.     DBF    D1,decloop2
  13397.     MOVE.B    D2,-(A2)
  13398.     DBF    D3,decloop1
  13399.     BRA.S    dec4_3
  13400.  
  13401. dec2    MOVEQ    #8,D1
  13402.     MOVEQ    #8,D4
  13403.     BRA.S    dec_2
  13404.  
  13405. dec3    MOVEQ    #2,D1
  13406.     BSR.S    dec6
  13407.     CMP.B    #2,D2
  13408.     BLT.S    dec4
  13409.     CMP.B    #3,D2
  13410.     BEQ.S    dec2
  13411.     MOVEQ    #8,D1
  13412.     BSR.S    dec6
  13413.     MOVE    D2,D3
  13414.     MOVE    #8,D1
  13415.     BRA.S    dec4_1
  13416.  
  13417. dec4    MOVE    #9,D1
  13418.     ADD    D2,D1
  13419.     ADDQ    #2,D2
  13420.     MOVE    D2,D3
  13421. dec4_1    BSR.S    dec6
  13422. dec4_2    SUBQ    #1,A2
  13423.     MOVE.B    0(A2,D2.W),(A2)
  13424.     DBF    D3,dec4_2
  13425. dec4_3    CMP.L    A2,A1
  13426.     BLT.S    dec_1
  13427.     RTS
  13428.  
  13429. dec5    MOVE.L    -(A0),D0
  13430.     MOVE    D0,$DFF1A2
  13431.     MOVE    #$10,CCR
  13432.     ROXR.L    #1,D0
  13433.     RTS
  13434.  
  13435. dec6    SUBQ    #1,D1
  13436.     CLR    D2
  13437. dec6loop
  13438.     LSR.L    #1,D0
  13439.     BNE.S    dec6skip
  13440.     MOVE.L    -(A0),D0
  13441.     MOVE    D0,$DFF1A2
  13442.     MOVE    #$10,CCR
  13443.     ROXR.L    #1,D0
  13444. dec6skip
  13445.     ROXL.L    #1,D2
  13446.     DBF    D1,dec6loop
  13447.     RTS
  13448.  
  13449. LoadModule
  13450.     MOVE    #1,LoadInProgress
  13451.     BSR    DoClearSong
  13452.     BSR    ClrSampleInfo
  13453.     JSR    SetDiskPtrCol
  13454.     LEA    ModulesPath2,A0
  13455.     JSR    CopyPath
  13456.     LEA    DirInputName,A0
  13457.     MOVEQ    #DirNameLength-1,D0
  13458. lmloop2    MOVE.B    (A0)+,(A1)+
  13459.     DBF    D0,lmloop2
  13460.     LEA    LoadingModuleText(PC),A0
  13461.     BSR    ShowStatusText
  13462.     MOVE.L    DOSBase(PC),A6
  13463.     MOVE.L    #FileName,D1
  13464.     MOVE.L    #1005,D2
  13465.     JSR    LVOOpen(A6)
  13466.     MOVE.L    D0,FileHandle
  13467.     TST    D0
  13468.     BEQ    CantOpenFile
  13469.     MOVE.L    D0,D1
  13470.     MOVE.L    SongDataPtr(PC),D2
  13471.     MOVE.L    #1084,D3
  13472.     JSR    LVORead(A6)
  13473.     MOVE.L    SongDataPtr(PC),A0
  13474.     CMP.L    #'PP20',(A0)
  13475.     BEQ    PowerPacked
  13476.     MOVE.B    #127,sd_numofpatt+1(A0) ; Set maxpatt to 127
  13477.     CMP.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  13478.     BEQ    lmskip
  13479.     BSR    MahoneyAndKaktus
  13480.     BNE    lmskip
  13481.     MOVE.L    FileHandle(PC),D1
  13482.     MOVE.L    #600,D2
  13483.     MOVEQ    #-1,D3
  13484.     JSR    LVOSeek(A6)
  13485. lmskip    LEA    LoadingModuleText(PC),A0
  13486.     BSR    ShowStatusText
  13487.     MOVE.L    SongDataPtr(PC),A0
  13488.     LEA    sd_pattpos(A0),A0
  13489.     MOVEQ    #0,D0
  13490.     MOVE.B    -1(A0),D0
  13491.     MOVEQ    #0,D3
  13492. lmloop3    CMP.B    (A0)+,D3
  13493.     BHI    lmskip2
  13494.     MOVE.B    -1(A0),D3
  13495. lmskip2    DBF    D0,lmloop3
  13496.     ADDQ    #1,D3
  13497.     MULU    #1024,D3
  13498.     MOVE.L    FileHandle(PC),D1
  13499.     MOVE.L    SongDataPtr(PC),D2
  13500.     ADD.L    #1084,D2
  13501.     MOVE.L    DOSBase,A6
  13502.     JSR    LVORead(A6)
  13503.     CLR.L    PatternNumber
  13504.     CLR.L    CurrPos
  13505.     BSR    RedrawPattern
  13506.     CLR    ScrPattPos
  13507.     BSR    SetScrPatternPos
  13508.     MOVE    #1,InsNum
  13509.     BSR    CheckAbort
  13510.     BEQ    rmiend
  13511.     TST.B    AutoExitFlag
  13512.     BEQ    readinstrloop
  13513.     JSR    ExitFromDir
  13514. readinstrloop
  13515.     TST.B    NosamplesFlag
  13516.     BNE    rmiend
  13517.     BSR    CheckAbort
  13518.     BEQ    rmiend
  13519.     BSR    ShowSampleInfo
  13520.     MOVE    InsNum(PC),TuneUp
  13521.     JSR    DoShowFreeMem
  13522.     MOVE.L    SongDataPtr(PC),A0
  13523.     MOVE    InsNum(PC),D7
  13524.     MULU    #30,D7
  13525.     MOVEQ    #0,D0
  13526.     MOVE    12(A0,D7.W),D0
  13527.     BEQ    rminext
  13528.     ADD.L    D0,D0
  13529.     MOVE.L    4.W,A6
  13530.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  13531.     MOVE.L    D0,-(SP)
  13532.     JSR    LVOAllocMem(A6)
  13533.     MOVE.L    (SP)+,D6
  13534.     TST.L    D0
  13535.     BNE    ReadModInstrument
  13536.     BSR    OutOfMemErr
  13537.     MOVE.L    DOSBase(PC),A6
  13538.     MOVE.L    FileHandle(PC),D1
  13539.     MOVE.L    D6,D2
  13540.     MOVEQ    #0,D3
  13541.     BRA    rminext
  13542.  
  13543. ReadModInstrument
  13544.     MOVE    InsNum(PC),D7
  13545.     LSL    #2,D7
  13546.     LEA    SamplePtrs(PC),A0
  13547.     MOVE.L    D0,0(A0,D7.W)
  13548.     MOVE.L    D6,124(A0,D7.W)
  13549.     MOVE.L    DOSBase(PC),A6
  13550.     MOVE.L    FileHandle(PC),D1
  13551.     MOVE.L    D0,D2
  13552.     MOVE.L    D6,D3
  13553.     JSR    LVORead(A6)
  13554.     BSR    RedrawSample
  13555. rminext    ADDQ    #1,InsNum
  13556.     CMP    #32,InsNum
  13557.     BNE    readinstrloop
  13558. rmiend    MOVE.L    FileHandle(PC),D1
  13559.     MOVE.L    DOSBase(PC),A6
  13560.     JSR    LVOClose(A6)
  13561.     MOVE    #1,InsNum
  13562.     MOVE.L    #6,CurrSpeed
  13563.     CLR    LoadInProgress
  13564.     BSR    ShowAllRight
  13565.     JSR    SetNormalPtrCol
  13566.     BSR    CheckInstrLengths
  13567.     BSR    ShowSampleInfo
  13568.     BSR    RedrawSample
  13569.     JMP    DoShowFreeMem
  13570.  
  13571. PowerPacked
  13572.     LEA    PowerPackedText,A0
  13573.     BSR    ShowStatusText
  13574.     JSR    SetErrorPtrCol
  13575.     BSR    DoClearSong
  13576.     BSR    ClrSampleInfo
  13577.     BRA    rmiend
  13578.  
  13579. PowerPackedText    dc.b "Powerpacker mod.!",0
  13580.  
  13581. ; --- save module to device!!
  13582.  
  13583. SaveModule
  13584.     JSR    StorePtrCol
  13585.     JSR    SetDiskPtrCol
  13586.     MOVE.L    SongDataPtr(PC),A0
  13587.     LEA    sd_pattpos(A0),A0
  13588.     MOVEQ    #0,D0
  13589.     MOVEQ    #0,D1
  13590.     MOVEQ    #0,D2
  13591.     CLR    HighPattNum
  13592. smloop    MOVE.B    0(A0,D0.W),D1
  13593.     ADDQ    #1,D0
  13594.     CMP    #128,D0
  13595.     BHI    DoSaveModule
  13596.     MOVE    HighPattNum(PC),D2
  13597.     CMP    D2,D1
  13598.     BLS    smloop
  13599.     MOVE    D1,HighPattNum
  13600.     BRA    smloop
  13601.  
  13602. DoSaveModule
  13603.     LEA    ModulesPath2,A0
  13604.     JSR    CopyPath
  13605.     MOVE.B    #'m',(A1)+
  13606.     MOVE.B    #'o',(A1)+
  13607.     MOVE.B    #'d',(A1)+
  13608.     MOVE.B    #'.',(A1)+
  13609.     MOVE.L    SongDataPtr(PC),A0
  13610.     MOVEQ    #19,D0
  13611. dsmloop2
  13612.     MOVE.B    (A0)+,(A1)+
  13613.     DBF    D0,dsmloop2
  13614.     MOVE.L    SongDataPtr(PC),A0
  13615.     MOVE.L    A0,DiskDataPtr
  13616.     MOVE.L    #1084,DiskDataLength
  13617.     MOVEQ    #0,D0
  13618.     MOVE    HighPattNum(PC),D0
  13619.     ADDQ.L    #1,D0
  13620.     LSL.L    #8,D0
  13621.     LSL.L    #2,D0
  13622.     ADD.L    D0,DiskDataLength    ; Add 1024 x NumOfPatt
  13623.     MOVE.B    #127,sd_numofpatt+1(A0) ; Set maxpatt to 127
  13624.     MOVE.L    #'M.K.',sd_mahokakt(A0)    ; M.K. again...
  13625.     LEA    SavingModuleText(PC),A0
  13626.     BSR    ShowStatusText
  13627.     BTST    #2,$DFF016
  13628.     BEQ    CantOpenFile
  13629.     BSR    OpenModForWrite
  13630.     BNE    CantOpenFile
  13631.     BSR    WriteModuleData
  13632.     BNE    WriteModError
  13633.     BTST    #2,$DFF016
  13634.     BEQ    WriteModError
  13635.     MOVE    InsNum(PC),SaveInstrNum
  13636.     MOVEQ    #1,D6
  13637. saveinstrloop
  13638.     MOVE    D6,InsNum
  13639.     BSR    ShowSampleInfo
  13640.     BSR    WriteInstrument
  13641.     TST.L    D0
  13642.     BNE.S    WriteModError
  13643.     ADDQ.B    #1,D6
  13644.     CMP.B    #32,D6
  13645.     BNE    saveinstrloop
  13646.  
  13647.     BSR    CloseWriteMod
  13648.     MOVE    SaveInstrNum(PC),InsNum
  13649.     BSR    ShowSampleInfo
  13650.     BSR    ShowAllRight
  13651.     JMP    RestorePtrCol
  13652.  
  13653. SaveInstrNum    dc.w 0
  13654.  
  13655. WriteModError
  13656.     BSR    CloseWriteMod
  13657.     BRA    CantSaveFile
  13658.  
  13659. WriteInstrument
  13660.     MOVE    D6,D0
  13661.     LSL    #2,D0
  13662.     LEA    SamplePtrs(PC),A0
  13663.     MOVE.L    0(A0,D0.W),D1
  13664.     BEQ    Zreturn
  13665.     MOVE.L    124(A0,D0.W),D0
  13666.     BEQ    Return2
  13667.     MOVE.L    D1,DiskDataPtr
  13668.     MOVE.L    SongDataPtr(PC),A0
  13669.     LEA    12(A0),A0
  13670.     MOVE    D6,D0
  13671.     MULU    #30,D0
  13672.     ADD.L    D0,A0
  13673.     MOVEQ    #0,D0
  13674.     MOVE    (A0),D0
  13675.     LSL.L    #1,D0
  13676.     MOVE.L    D0,DiskDataLength
  13677.     BNE.S    WriteModuleData
  13678.     RTS
  13679.  
  13680. Zreturn    MOVEQ    #0,D0            ;a quasar addition
  13681.     RTS
  13682.  
  13683. OpenModForWrite
  13684.     MOVE.L    DOSBase(PC),A6
  13685.     MOVE.L    #FileName,D1
  13686.     MOVE.L    #1006,D2
  13687.     JSR    LVOOpen(A6)
  13688.     MOVE.L    D0,D7
  13689.     BEQ.S    wmfailed
  13690.     MOVEQ    #0,D0
  13691.     RTS
  13692.  
  13693. WriteModuleData
  13694.     MOVE.L    DOSBase(PC),A6
  13695.     MOVE.L    D7,D1
  13696.     MOVE.L    DiskDataPtr(PC),D2
  13697.     MOVE.L    DiskDataLength(PC),D3
  13698.     BEQ    .okok
  13699.     JSR    LVOWrite(A6)
  13700.     CMP.L    DiskDataLength(PC),D3
  13701.     BNE.S    wmfailed
  13702. ;    JSR    LVOIoErr(A6)
  13703. ;    TST.L    D0
  13704. ;    BNE.S    wmfailed
  13705.     MOVEQ    #0,D0
  13706. .okok    RTS
  13707.  
  13708. wmfailed
  13709.     MOVEQ    #-1,D0
  13710.     RTS
  13711.  
  13712. CloseWriteMod
  13713.     MOVE.L    DOSBase(PC),A6
  13714.     MOVE.L    D7,D1
  13715.     JMP    LVOClose(A6)
  13716.  
  13717. ;---- Load PLST ----
  13718.  
  13719. LoadPLST
  13720.     LEA    LoadPLSTText,A0
  13721.     JSR    AreYouSure
  13722.     BNE    Return2
  13723.     JSR    WaitForButtonUp
  13724.     LEA    LoadingPLSTText(PC),A0
  13725.     BSR    ShowStatusText
  13726. DoLoadPLST
  13727.     JSR    StorePtrCol
  13728.     LEA    PTPath,A0
  13729.     JSR    CopyPath
  13730.     LEA    PLSTName(PC),A0
  13731.     MOVEQ    #4,D0
  13732. dlploop    MOVE.B    (A0)+,(A1)+
  13733.     DBF    D0,dlploop
  13734.     MOVE.L    #FileName,D1
  13735.     MOVE.L    #1005,D2
  13736.     MOVE.L    DOSBase(PC),A6
  13737.     JSR    LVOOpen(A6)
  13738.     MOVE.L    D0,D7
  13739.     BEQ    PLSTOpenErr
  13740.     JSR    SetDiskPtrCol
  13741.     CLR.L    PresetTotal
  13742.     BSR.S    AllocPLST
  13743.     MOVE.L    PLSTmem(PC),D2
  13744.     BEQ    PLSTMemErr2
  13745.     MOVE.L    D7,D1
  13746.     MOVE.L    PLSTAllocSize,D3
  13747.     MOVE.L    DOSBase(PC),A6
  13748.     JSR    LVORead(A6)
  13749.     MOVE.L    D0,MaxPLSTOffset
  13750.     DIVU    #30,D0
  13751.     MOVE    D0,PresetTotal
  13752. cloplst    MOVE.L    D7,D1
  13753.     MOVE.L    DOSBase(PC),A6
  13754.     JSR    LVOClose(A6)
  13755. ;    BSR    PLSTCheckNum
  13756. ;    BSR    ShowAllRight
  13757.     JMP    RestorePtrCol
  13758.  
  13759. PLSTName    dc.b    'PLST',0,0
  13760.  
  13761. AllocPLST
  13762.     BSR.S    FreePLST
  13763.     MOVE    MaxPLSTEntries,D0
  13764.     BEQ    Return2
  13765.     MULU    #30,D0
  13766.     MOVE.L    D0,PLSTAllocSize
  13767.     MOVE.L    #MEMF_CLEAR,D1
  13768.     MOVE.L    4.W,A6
  13769.     JSR    LVOAllocMem(A6)
  13770.     MOVE.L    D0,PLSTmem
  13771.     MOVE    MaxPLSTEntries,MaxPLSTEntries2
  13772.     RTS
  13773.  
  13774. FreePLST
  13775.     CLR    MaxPLSTEntries2
  13776.     CLR.L    MaxPLSTOffset
  13777.     CLR    PresetTotal
  13778.     MOVE.L    PLSTmem,D0
  13779.     BEQ    Return2
  13780.     MOVE.L    D0,A1
  13781.     MOVE.L    PLSTAllocSize,D0
  13782.     MOVE.L    4.W,A6
  13783.     JSR    LVOFreeMem(A6)
  13784.     CLR.L    PLSTmem
  13785.     RTS
  13786.  
  13787. PLSTMemErr2
  13788.     BSR.S    PLSTMemErr
  13789.     BRA    cloplst
  13790.  
  13791. PLSTMemErr
  13792.     TST    MaxPLSTEntries
  13793.     BEQ.S    reptrco
  13794.     BSET    #0,InitError
  13795.     LEA    PLSTMemText,A0
  13796. plster    BSR.S    ShowStatusText
  13797.     MOVE    #50,WaitTime
  13798.     JMP    ErrorRestoreCol
  13799. reptrco    JMP    RestorePtrCol
  13800. PLSTOpenErr
  13801.     TST    MaxPLSTEntries
  13802.     BEQ.S    reptrco
  13803.     BSET    #1,InitError
  13804.     LEA    PLSTOpenText,A0
  13805.     BRA.S    plster
  13806.  
  13807. PLSTMemText    dc.b 'no mem for plst !',0
  13808. PLSTOpenText    dc.b 'plst not found ! ',0
  13809. InitError    dc.b 0,0
  13810.  
  13811.  
  13812. ShowAllRight
  13813.     MOVEM.L    D0-D7/A0-A6,-(SP)
  13814.     LEA    AllRightText(PC),A0
  13815.     BSR.S    ShowStatusText
  13816.     MOVEM.L    (SP)+,D0-D7/A0-A6
  13817.     RTS
  13818.  
  13819. ShowStatusText
  13820.     MOVE.L    TextBplPtr(PC),A1
  13821.     ADD.L    #5131,A1
  13822.     MOVEQ    #4,D0
  13823. stloop1    MOVEQ    #16,D1
  13824. stloop2    CLR.B    (A1)+
  13825.     DBF    D1,stloop2
  13826.     LEA    23(A1),A1
  13827.     DBF    D0,stloop1
  13828.     MOVE.L    A0,A1
  13829.     MOVE    #5131,D1
  13830.     MOVEQ    #-1,D0
  13831. stloop3    ADDQ    #1,D0
  13832.     TST.B    (A1)+
  13833.     BNE.S    stloop3
  13834.     BRA    ShowText3
  13835.  
  13836. ;---- Redraw Pattern ----
  13837.  
  13838. RedrawPattern
  13839.     TST    SamScrEnable
  13840.     BNE    Return2
  13841.     SF    PattRfsh
  13842.     MOVE    #5121,TextOffset
  13843.     MOVE    PatternNumber+2(PC),WordNumber
  13844.     BSR    Print2DecDigits ; Print PatternNumber
  13845.     MOVE.L    SongDataPtr(PC),A6
  13846.     LEA    $43C(A6),A6
  13847.     MOVE.L    PatternNumber,D6
  13848.     LSL.L    #8,D6
  13849.     LSL.L    #2,D6
  13850.     ADD.L    D6,A6
  13851.     MOVE    #7521,TextOffset
  13852.     CLR.L    PPattPos
  13853.     LEA    PeriodTable(PC),A2
  13854.     LEA    RedrawBuffer(PC),A3
  13855.     LEA    FastHexTable(PC),A4
  13856.     MOVEQ    #'0',D4
  13857.     MOVE.B    BlankZeroFlag,D5
  13858.     MOVEQ    #63,D6
  13859. rpnxpos    MOVEQ    #3,D7
  13860.     MOVE    PPattPos+2(PC),WordNumber
  13861.     BSR    Print2DecDigits ; Print PatternPosition
  13862.     ADDQ    #1,TextOffset
  13863.     ADDQ.L    #1,PPattPos
  13864. rploop    MOVEQ    #0,D0
  13865.     MOVEQ    #0,D1
  13866.     MOVE    (A6),D1
  13867.     AND    #$0FFF,D1
  13868.     BNE.S    rpfind
  13869.     MOVE.L    #'--- ',(A3)
  13870.     BRA.S    rpskip
  13871. rpfind    MOVEQ    #36,D2
  13872. rpfindloop
  13873.     CMP    (A2,D0.W),D1
  13874.     BEQ.S    rpfound
  13875.     ADDQ.L    #2,D0
  13876.     DBF    D2,rpfindloop
  13877.     MOVE.L    #'??? ',(A3)
  13878.     BRA.S    rpskip
  13879. rpfound    LSL.L    #1,D0
  13880.     ADD.L    NoteNamesPtr(PC),D0
  13881.     MOVE.L    D0,A0
  13882.     MOVE.L    (A0),(A3)
  13883. rpskip    MOVE.B    (A6)+,D0
  13884.     LSR.B    #4,D0
  13885.     ADD.B    #'0',D0
  13886.     MOVE.B    D0,3(A3)
  13887.     MOVE.B    (A6)+,D0
  13888.     MOVEQ    #0,D0
  13889.     MOVE.B    (A6)+,D0
  13890.     ADD    D0,D0
  13891.     MOVE    (A4,D0.W),4(A3)
  13892.     MOVEQ    #0,D0
  13893.     MOVE.B    (A6)+,D0
  13894.     ADD    D0,D0
  13895.     MOVE    (A4,D0.W),6(A3)
  13896.  
  13897.     TST.B    D5
  13898.     BEQ.S    rpskp3
  13899.     CMP.B    3(A3),D4
  13900.     BNE.S    rpskp3
  13901.     MOVE.B    #' ',3(A3)
  13902. rpskp3    MOVE    #9,TextLength
  13903.     MOVE.L    A3,ShowTextPtr
  13904.     BSR    ShowText
  13905.     DBF    D7,rploop  ; Next Channel
  13906.     ADD    #241,TextOffset
  13907.     DBF    D6,rpnxpos ; Next PattPos
  13908.     RTS
  13909.  
  13910. RedrawBuffer    dc.b '---00000 ',0
  13911.  
  13912.  
  13913. ShowPosition
  13914.     MOVE.L    SongDataPtr(PC),A0
  13915.     LEA    952(A0),A0
  13916.     ADD.L    CurrPos(PC),A0
  13917.     MOVE.B    (A0),WordNumber+1
  13918.     MOVE.B    (A0),PattRfshNum+3
  13919.     MOVEQ    #0,D1
  13920.     MOVE.B    (A0),D1
  13921.     CMP.B    LongFFFF+3(PC),D1
  13922.     BEQ.S    spskip2
  13923.     ST    PattRfsh
  13924. spskip2    MOVE    #608,TextOffset
  13925.     MOVE.B    (A0),LongFFFF+3
  13926.     CMP    #0,CurrScreen
  13927.     BEQ.S    spokok
  13928.     CMP    #1,CurrScreen
  13929.     BEQ.S    spokok
  13930.     CMP    #6,CurrScreen
  13931.     BEQ.S    spokok
  13932.     RTS
  13933. spokok    BSR    Print4DecDigits
  13934.     MOVE    CurrPos+2,WordNumber
  13935.     MOVE    #168,TextOffset
  13936.     BRA    Print4DecDigits
  13937.  
  13938.  
  13939. ShowSongLength
  13940.     CMP    #2,CurrScreen
  13941.     BEQ.S    ShowSongName
  13942.     CMP    #3,CurrScreen
  13943.     BEQ.S    ShowSongName
  13944.     CMP    #4,CurrScreen
  13945.     BEQ    Return2
  13946.     CMP    #5,CurrScreen
  13947.     BEQ.S    ShowSongName
  13948.     MOVE.L    SongDataPtr(PC),A0
  13949.     LEA    sd_numofpatt(A0),A0
  13950.     MOVE.L    A0,CurrCmds
  13951.     CLR    WordNumber
  13952.     MOVE.B    (A0),WordNumber+1
  13953.     MOVE    #1048,TextOffset
  13954.     BSR    Print4DecDigits
  13955.     MOVE.L    CurrCmds(PC),A0
  13956. ShowSongName
  13957.     MOVE.L    SongDataPtr(PC),A0
  13958.     MOVE    #4133,D1
  13959.     MOVEQ    #20,D0
  13960.     BRA    ShowText3
  13961.  
  13962.  
  13963. ShowSampleInfo
  13964.     MOVEQ    #0,D0
  13965.     MOVE    InsNum(PC),D0
  13966.     MOVE    D0,PlayInsNum
  13967.     BNE.S    ssiskipit
  13968.     MOVE    LastInsNum(PC),D0
  13969. ssiskipit
  13970.     MOVE    D0,D1
  13971.     LSL.L    #2,D0
  13972.     LEA    SamplePtrs(PC),A0
  13973.     MOVE.L    (A0,D0.W),si_pointer
  13974.     MOVE.L    SongDataPtr(PC),A0
  13975.     LEA    -10(A0),A0
  13976.     MOVE    D1,D0
  13977.     MULU    #30,D0
  13978.     ADD.L    D0,A0
  13979.     MOVE.L    A0,CurrCmds
  13980.     MOVE.L    22(A0),SampleInfo
  13981.     MOVE.L    26(A0),si_long
  13982.     TST.B    NoSampleInfo
  13983.     BNE    ssiskip
  13984.  
  13985.     MOVE.L    A0,-(SP)
  13986.     MOVE.B    #' ',FineTuneSign
  13987.     MOVE.B    24(A0),D0
  13988.     BEQ.S    dopfitu
  13989.     MOVE.B    #'+',FineTuneSign
  13990.     BTST    #3,D0
  13991.     BEQ.S    dopfitu
  13992.     MOVE.B    #'-',FineTuneSign
  13993.     MOVEQ    #16,D1
  13994.     SUB.B    D0,D1
  13995.     MOVE.B    D1,D0
  13996. dopfitu    MOVE    #1491,TextOffset
  13997.     BSR    PrintHexDigit  ; FineTune
  13998.     LEA    FineTuneSign(PC),A0
  13999.     MOVE    #1490,D1
  14000.     MOVEQ    #1,D0
  14001.     BSR    ShowText3  ; FineTuneSign
  14002.     MOVE.L    (SP)+,A0
  14003.  
  14004.     CLR    WordNumber
  14005.     MOVE.B    25(A0),WordNumber+1
  14006.     MOVE    WordNumber,VolumeEfx
  14007.     OR    #$0C00,VolumeEfx
  14008.     MOVE    #2368,TextOffset
  14009.     BSR    PrintHexWord  ; Volume
  14010.  
  14011.     MOVEQ    #0,D0
  14012.     MOVE    SampleInfo(PC),D0
  14013.     LSL.L    #1,D0
  14014.     MOVE    D0,WordNumber
  14015.     MOVE.L    SamplePos,D2
  14016.     CMP.L    D0,D2
  14017.     BLS.S    ShowLen
  14018.     MOVE.L    D0,SamplePos
  14019.     BSR    ShowPos
  14020.     MOVEQ    #0,D0
  14021.     MOVE    SampleInfo(PC),D0
  14022.     LSL.L    #1,D0
  14023.     MOVE    D0,WordNumber
  14024. ShowLen    MOVE    #2808,TextOffset
  14025.     BSR    PrintHexWord  ; Length
  14026.  
  14027.     MOVE    si_long,D0
  14028.     ADD    D0,D0
  14029.     MOVE    D0,WordNumber
  14030.     MOVE    #3248,TextOffset
  14031.     BSR    PrintHexWord  ; Repeat
  14032.  
  14033.     MOVE    si_long+2,D0
  14034.     ADD    D0,D0
  14035.     MOVE    D0,WordNumber
  14036.     MOVE    #3688,TextOffset
  14037.     BSR    PrintHexWord  ; RepLen
  14038.  
  14039.     BSR.S    ssiinst
  14040.  
  14041. ssiskip    TST.B    NoSampleInfo
  14042.     BEQ.S    ssiskp2
  14043.     CMP    #5,CurrScreen
  14044.     BEQ.S    ssiskp2
  14045.     CMP    #3,CurrScreen
  14046.     BNE    Return2
  14047. ssiskp2    MOVE.L    CurrCmds(PC),A0
  14048.     MOVE    #4573,D1
  14049.     MOVEQ    #22,D0
  14050.     BRA    ShowText3  ; SampleName
  14051.  
  14052. ssiinst    TST.B    NoSampleInfo
  14053.     BNE    Return2
  14054.     MOVE    InsNum(PC),WordNumber
  14055.     MOVE    #1928,TextOffset
  14056.     BRA    PrintHexWord  ; SampleNumber
  14057.  
  14058. FineTuneSign    dc.b ' ',0
  14059. VolumeEfx    dc.w 0
  14060.  
  14061. ;---- Print Decimal Digits ----
  14062.  
  14063. Print2DecDigits
  14064.     MOVE    #2,TextLength
  14065.     MOVEQ    #0,D1
  14066.     MOVE    WordNumber(PC),D1
  14067.     LEA    NumberText(PC),A0
  14068.     BRA.S    pdig
  14069.  
  14070. Print3DecDigits
  14071.     MOVE    #3,TextLength
  14072.     MOVEQ    #0,D1
  14073.     MOVE    WordNumber(PC),D1
  14074.     LEA    NumberText(PC),A0
  14075.     BRA.S    pdig100
  14076.  
  14077. Print4DecDigits
  14078.     MOVE    #4,TextLength
  14079.     MOVEQ    #0,D1
  14080.     MOVE    WordNumber(PC),D1
  14081.     LEA    NumberText(PC),A0
  14082.     DIVU    #1000,D1
  14083.     BSR.S    DoOneDigit
  14084. pdig100    DIVU    #100,D1
  14085.     BSR.S    DoOneDigit
  14086. pdig    DIVU    #10,D1
  14087.     BSR.S    DoOneDigit
  14088.     BSR.S    DoOneDigit
  14089.     MOVE.L    #NumberText,A0
  14090.     BRA    ShowText2
  14091.  
  14092. DoOneDigit
  14093.     ADD.B    #'0',D1
  14094.     MOVE.B    D1,(A0)+
  14095.     CLR    D1
  14096.     SWAP    D1
  14097.     RTS
  14098.  
  14099. Print6DecDigits
  14100.     LEA    NumberText,A0
  14101.     MOVE.L    D0,D1
  14102.     CMP.L    #1000000,D1
  14103.     BHS    toobig
  14104.  
  14105.     SWAP    D1
  14106.     CLR    D1
  14107.     SWAP    D1
  14108.     DIVU    #10,D1
  14109.     SWAP    D1
  14110.     ADD.B    #'0',D1
  14111.     MOVE.B    D1,5(A0)
  14112.     CMP.L    #10,D0
  14113.     BLO.S    p6zero1
  14114.  
  14115.     DIVU    #100,D0
  14116.     MOVE.L    D0,D1
  14117.     CLR    D0
  14118.     SWAP    D0
  14119.     DIVU    #10,D0
  14120.     ADD.B    #'0',D0
  14121.     MOVE.B    D0,4(A0)
  14122.     AND.L    #$FFFF,D1
  14123.     BEQ.S    p6zero2
  14124.     DIVU    #10,D1
  14125.     SWAP    D1
  14126.     ADD.B    #'0',D1
  14127.     MOVE.B    D1,3(A0)
  14128.     CLR    D1
  14129.     SWAP    D1
  14130.     TST    D1
  14131.     BEQ.S    p6zero3
  14132.     DIVU    #10,D1
  14133.     SWAP    D1
  14134.     ADD.B    #'0',D1
  14135.     MOVE.B    D1,2(A0)
  14136.     CLR    D1
  14137.     SWAP    D1
  14138.     TST    D1
  14139.     BEQ.S    p6zero4
  14140.     DIVU    #10,D1
  14141.     SWAP    D1
  14142.     ADD.B    #'0',D1
  14143.     MOVE.B    D1,1(A0)
  14144.     CLR    D1
  14145.     SWAP    D1
  14146.     TST    D1
  14147.     BEQ.S    p6zero5
  14148.     DIVU    #10,D1
  14149.     SWAP    D1
  14150.     ADD.B    #'0',D1
  14151.     MOVE.B    D1,(A0)
  14152.     BRA.S    p6end
  14153.  
  14154. p6zero1    MOVE.B    #' ',4(A0)
  14155. p6zero2    MOVE.B    #' ',3(A0)
  14156. p6zero3    MOVE.B    #' ',2(A0)
  14157. p6zero4    MOVE.B    #' ',1(A0)
  14158. p6zero5    MOVE.B    #' ',0(A0)
  14159. p6end    MOVE    #6,TextLength
  14160.     BRA    ShowText2
  14161.  
  14162. toobig    MOVE.B    #' ',D0
  14163.     BSR.S    toobig2
  14164.     DIVU    #1000,D0
  14165.     MOVE    D0,WordNumber
  14166.     BSR    Print4DecDigits
  14167.     MOVE.B    #'K',D0
  14168. toobig2    LEA    NumberText(PC),A0
  14169.     MOVE.B    D0,(A0)
  14170.     MOVE    #1,TextLength
  14171.     BRA    ShowText2
  14172.  
  14173. NumberText    dcb.b    6,0
  14174.  
  14175. ;---- Print Hex Digits ----
  14176.  
  14177. PrintHiInstrNum
  14178.     MOVEQ    #0,D0
  14179.     TST    CurrentPlayNote
  14180.     BEQ.S    phin2
  14181.     MOVE    InsNum(PC),D0
  14182.     LSR    #4,D0
  14183.     BNE.S    PrintHexDigit
  14184. phin2    TST.B    BlankZeroFlag
  14185.     BEQ.S    PrintHexDigit
  14186.     LEA    BlankInsText(PC),A0
  14187.     BRA.S    phd2
  14188. PrintHexDigit
  14189.     AND.L    #$0F,D0
  14190.     ADD.L    D0,D0
  14191.     LEA    FastHexTable+1(PC),A0
  14192.     ADD.L    D0,A0
  14193. phd2    MOVE    #1,TextLength
  14194.     BRA.S    ShowText2
  14195.  
  14196. BlankInsText    dc.b " ",0
  14197.  
  14198. PrintHexWord
  14199.     LEA    WordNumber(PC),A0
  14200.     MOVEQ    #0,D0
  14201.     MOVE.B    (A0),D0
  14202.     LSL.L    #1,D0
  14203.     LEA    FastHexTable(PC),A0
  14204.     ADD.L    D0,A0
  14205.     MOVE    #2,TextLength
  14206.     BSR.S    ShowText2
  14207. PrintHexByte
  14208.     LEA    WordNumber(PC),A0
  14209.     MOVEQ    #0,D0
  14210.     MOVE.B    1(A0),D0
  14211.     LSL.L    #1,D0
  14212.     MOVE.L    #FastHexTable,A0
  14213.     ADD.L    D0,A0
  14214.     MOVE    #2,TextLength
  14215.     BSR.S    ShowText2
  14216.     CLR    WordNumber
  14217.     RTS
  14218.  
  14219. ;---- Text Output Routines ----
  14220.  
  14221. ShowText3
  14222.     MOVE    D0,TextLength
  14223.     MOVE    D1,TextOffset
  14224. ShowText2
  14225.     MOVE.L    A0,ShowTextPtr
  14226. ShowText
  14227.     MOVEM.L    A2-A4,-(SP)
  14228.     LEA    TextTable(PC),A3
  14229.     LEA    FontData,A4
  14230.     MOVE    TextLength(PC),D0
  14231.     MOVE.L    TextBplPtr(PC),A1
  14232.     MOVE    TextOffset(PC),D1
  14233.     LEA    (A1,D1.W),A1
  14234.     ADD    D0,TextOffset
  14235.     MOVE.L    ShowTextPtr(PC),A0
  14236.     BRA.S    dstlope
  14237. dstloop    MOVEQ    #0,D1
  14238.     MOVE.B    (A0)+,D1
  14239.     BNE.S    dstskip
  14240.     MOVE.B    ShowZeroFlag(PC),D1
  14241. dstskip    MOVE.B    (A3,D1.W),D1
  14242.     LSL    #3,D1
  14243.     MOVE.L    A4,A2
  14244.     ADD.L    D1,A2
  14245.     MOVE.B    (A2)+,(A1)+
  14246.     MOVE.B    (A2)+,40-1(A1)
  14247.     MOVE.B    (A2)+,80-1(A1)
  14248.     MOVE.B    (A2)+,120-1(A1)
  14249.     MOVE.B    (A2),160-1(A1)
  14250. dstlope    DBF    D0,dstloop
  14251.     MOVEM.L    (SP)+,A2-A4
  14252.     RTS
  14253.  
  14254. SpaceShowText
  14255.     MOVE    ShowZeroFlag(PC),-(SP)
  14256.     MOVE.B    #' ',ShowZeroFlag
  14257.     BSR.S    ShowText
  14258.     MOVE    (SP)+,ShowZeroFlag
  14259.     RTS
  14260.  
  14261. ShowZeroFlag    dc.b    95,0
  14262.  
  14263. TextTable
  14264.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 0
  14265.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  14266.     dc.b 00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15 ; 32
  14267.     dc.b 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
  14268.     dc.b 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 ; 64
  14269.     dc.b 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
  14270.     dc.b 69,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 ; 96
  14271.     dc.b 48,49,50,51,52,53,54,55,56,57,58,65,66,67,68,63
  14272.     dc.b 69,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 128
  14273.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  14274.     dc.b 0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 160
  14275.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  14276.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 192
  14277.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  14278.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 224
  14279.     dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  14280.  
  14281.  
  14282. ;---- Set Sprite Position ----
  14283.  
  14284. SetSpritePos
  14285.     ADD    #$2C,D1
  14286.     ADD    D1,D2
  14287.     ROL.W    #7,D2
  14288.     ASL    #1,D2
  14289.     BCC.S    sppskip
  14290.     OR    #2,D2
  14291. sppskip    ROL.W    #7,D1
  14292.     ASL    #1,D1
  14293.     BCC.S    sppskip2
  14294.     OR    #4,D2
  14295. sppskip2
  14296.     ADD    #$7D,D0
  14297.     ASR    #1,D0
  14298.     BCC.S    sppskip3
  14299.     OR    #1,D2
  14300. sppskip3
  14301.     OR    D0,D1
  14302.     MOVE    D1,(A0)
  14303.     MOVE    D2,2(A0)
  14304.     RTS
  14305.  
  14306.  
  14307. ;---- DoLoad / DoSave Data ----
  14308.  
  14309. DoLoadData
  14310.     TST.L    DiskDataLength
  14311.     BEQ.S    dlsend
  14312.     TST.L    DiskDataPtr
  14313.     BEQ.S    dlsend
  14314.     JSR    SetDiskPtrCol
  14315.     LEA    LoadingText(PC),A0
  14316.     BSR    ShowStatusText
  14317.     MOVE.L    DOSBase(PC),A6
  14318.     MOVE.L    FileNamePtr(PC),D1
  14319.     MOVE.L    #1005,D2
  14320.     JSR    LVOOpen(A6)
  14321.     MOVE.L    D0,FileHandle
  14322.     BEQ.S    CantOpenFile
  14323.     MOVE.L    FileHandle(PC),D1
  14324.     MOVE.L    DiskDataPtr(PC),D2
  14325.     MOVE.L    DiskDataLength(PC),D3
  14326.     JSR    LVORead(A6)
  14327.     MOVE.L    FileHandle(PC),D1
  14328.     JSR    LVOClose(A6)
  14329. dlsend    CLR.L    FileHandle
  14330.     JSR    SetNormalPtrCol
  14331.     MOVEQ    #-1,D0
  14332.     RTS
  14333.  
  14334. CantOpenFile
  14335.     LEA    CantOpenFileText(PC),A0
  14336. caopfil    BSR    ShowStatusText
  14337.     JSR    SetErrorPtrCol
  14338.      MOVEQ    #0,D0
  14339.     RTS
  14340.  
  14341. CantSaveFile
  14342.     LEA    CantSaveFileText(PC),A0
  14343.     BRA.S    caopfil
  14344. CantExamFile
  14345.     LEA    CantExamFileText(PC),A0
  14346.     BRA.S    caopfil
  14347. CantFindFile
  14348.     LEA    CantFindFileText(PC),A0
  14349.     BRA.S    caopfil
  14350. FileIsEmpty
  14351.     LEA    FileIsEmptyText(PC),A0
  14352.     BRA.S    caopfil
  14353.  
  14354. CantOpenFileText    dc.b "can't open file !",0
  14355. CantSaveFileText    dc.b "can't save file !",0
  14356. CantExamFileText    dc.b "examine error !",0
  14357. CantFindFileText    dc.b "can't find file !",0
  14358. FileIsEmptyText        dc.b "file is empty !",0
  14359.  
  14360. DoSaveData
  14361.     JSR    SetDiskPtrCol
  14362.     LEA    SavingText(PC),A0
  14363.     BSR    ShowStatusText
  14364.     MOVE.L    DOSBase(PC),A6
  14365.     MOVE.L    FileNamePtr(PC),D1
  14366.     MOVE.L    #1006,D2
  14367.     JSR    LVOOpen(A6)
  14368.     MOVE.L    D0,FileHandle
  14369.     BEQ    CantOpenFile
  14370.     MOVE.L    FileHandle(PC),D1
  14371.     MOVE.L    DiskDataPtr(PC),D2
  14372.     MOVE.L    DiskDataLength(PC),D3
  14373.     JSR    LVOWrite(A6)
  14374.     MOVE.L    FileHandle(PC),D1
  14375.     JSR    LVOClose(A6)
  14376.     CLR.L    FileHandle
  14377.     JMP    SetNormalPtrCol
  14378.  
  14379. ;---- PLST ----
  14380.  
  14381. PLST    CLR.B    RawKeyCode
  14382.     CMP    #6,CurrScreen
  14383.     BEQ    ExitPLST
  14384.     CMP    #1,CurrScreen
  14385.     BNE    Return2
  14386.     JSR    WaitForButtonUp
  14387.     MOVE    #6,CurrScreen
  14388.     JSR    ClearRightArea
  14389.     JSR    ClearAnalyzerColors
  14390.     BSR.S    DrawPLSTScreen
  14391.     BEQ    ExitPLST
  14392.     BSR    RedrawPLST
  14393. PLST_rts
  14394.     RTS
  14395.  
  14396. DrawPLSTScreen
  14397.     LEA    PLSTData,A0
  14398.     BSR    Decompact
  14399.     BEQ    Return2
  14400.  
  14401.     LEA    BitPlaneData+TopMenusPos,A0
  14402.     MOVEQ    #98,D0
  14403. dplstloop1
  14404.     MOVEQ    #24,D1
  14405. dplstloop2
  14406.     MOVE.B    2574(A1),PlaneSize(A0)
  14407.     MOVE.B    (A1)+,(A0)+
  14408.     DBF    D1,dplstloop2
  14409.     LEA    15(A0),A0
  14410.     ADDQ.L    #1,A1
  14411.     DBF    D0,dplstloop1
  14412.  
  14413.     BSR    FreeDecompMem
  14414.     MOVEQ    #-1,D0
  14415.     RTS
  14416.  
  14417. ShowDiskNames
  14418.     MOVE    #616,TextOffset
  14419.     MOVE    #5,TextLength
  14420.     MOVE.L    #STText1,A0
  14421.     BSR    ShowText2
  14422.     ADDQ    #1,TextOffset
  14423.     MOVE.L    #STText2,A0
  14424.     BSR    ShowText2
  14425.     ADDQ    #1,TextOffset
  14426.     MOVE.L    #STText3,A0
  14427.     BRA    ShowText2
  14428.  
  14429. PLSTCheckNum
  14430.     TST.L    PLSTmem
  14431.     BEQ    NoPLST
  14432.     TST.L    MaxPLSTOffset
  14433.     BEQ    NoPLST
  14434.     MOVE.L    PLSTmem(PC),A0
  14435.     MOVE    PresetTotal(PC),D7
  14436.     SUBQ    #1,D7
  14437.     TST.B    STText1Number
  14438.     BNE    plstsskip
  14439.     TST.B    STText2Number
  14440.     BNE    plstsskip
  14441.     TST.B    STText3Number
  14442.     BEQ    PLSTMarkAll
  14443. plstsskip
  14444.     MOVE.L    STText1Number-1(PC),A3
  14445.     MOVE.L    STText2Number-1(PC),A4
  14446.     MOVE.L    STText3Number-1(PC),A5
  14447.     MOVEQ    #0,D6
  14448. PLSTmarkloop
  14449.     MOVE    #'st',(A0)    ; Set lowercase 'st'
  14450.     MOVE.B    3(A0),D0
  14451.     CMP.B    #'a',D0
  14452.     BLO.S    pmlskp1
  14453.     SUB.B    #32,D0
  14454. pmlskp1    MOVE.B    D0,3(A0)
  14455.     MOVE.B    4(A0),D0
  14456.     CMP.B    #'a',D0
  14457.     BLO.S    pmlskp2
  14458.     SUB.B    #32,D0
  14459. pmlskp2    MOVE.B    D0,4(A0)
  14460.     MOVE.L    2(A0),D0    ; Get number ('-01:' etc)
  14461. PLSTchk1
  14462.     CMP.L    A3,D0
  14463.     BNE    PLSTchk2
  14464.     MOVE    #'ST',(A0)
  14465.     ADDQ    #1,D6
  14466.     BRA    PLSTmarknext
  14467.  
  14468. PLSTchk2
  14469.     CMP.L    A4,D0
  14470.     BNE    PLSTchk3
  14471.     MOVE    #'ST',(A0)
  14472.     ADDQ    #1,D6
  14473.     BRA    PLSTmarknext
  14474.  
  14475. PLSTchk3
  14476.     CMP.L    A5,D0
  14477.     BNE    PLSTmarknext
  14478.     MOVE    #'ST',(A0)
  14479.     ADDQ    #1,D6
  14480. PLSTmarknext
  14481.     ADD.L    #30,A0
  14482.     DBF    D7,PLSTmarkloop
  14483.     MOVE    D6,PresetMarkTotal
  14484.     CLR    PLSTpos
  14485.     CLR.L    PLSTOffset
  14486.     RTS
  14487.  
  14488. PLSTMarkAll
  14489.     MOVE    #'ST',(A0)    ; Set uppercase 'ST'
  14490.     LEA    30(A0),A0
  14491.     DBF    D7,PLSTMarkAll
  14492.     MOVE    PresetTotal(PC),PresetMarkTotal
  14493.     CLR    PLSTpos
  14494.     CLR.L    PLSTOffset
  14495.     RTS
  14496.  
  14497. NoPLST    CLR    PresetMarkTotal
  14498.     CLR    PLSTpos
  14499.     CLR.L    PLSTOffset
  14500.     RTS
  14501.  
  14502. RedrawPLST
  14503.     MOVE    PresetMarkTotal(PC),WordNumber
  14504.     MOVE    #189,TextOffset
  14505.     BSR    Print4DecDigits
  14506.     BSR    ShowDiskNames
  14507.     TST.L    PLSTmem
  14508.     BEQ    PLST_rts
  14509.     TST.L    MaxPLSTOffset
  14510.     BEQ    PLST_rts
  14511.  
  14512.     MOVE.L    PLSTOffset(PC),D6
  14513.     MOVE.L    PLSTmem(PC),A6
  14514.     MOVE    #976,A5        ; TextOffset
  14515.     LEA    PLSTOffset(PC),A4
  14516.     MOVEQ    #11,D7        ; Number of lines to print
  14517.     TST.L    D6
  14518.     BMI    EndOfPLST
  14519. dtplstloop
  14520.     CMP    #'ST',(A6,D6.L)    ; Check for 'ST'
  14521.     BNE    PLSTNext
  14522.     MOVE.L    D6,(A4)+
  14523.     MOVE    A5,TextOffset
  14524.     MOVE    #19,TextLength
  14525.     LEA    (A6,D6.L),A3
  14526.     ADDQ.L    #3,A3
  14527.     MOVE.L    A3,ShowTextPtr
  14528.     MOVEM.L    D0-D7/A0-A6,-(SP)
  14529.     BSR    SpaceShowText
  14530.     MOVEM.L    (SP)+,D0-D7/A0-A6
  14531.     MOVE    22(A6,D6.L),WordNumber
  14532.     MOVE    WordNumber,D0
  14533.     LSL    #1,D0
  14534.     MOVE    D0,WordNumber
  14535.     MOVEM.L    D0-D7/A0-A6,-(SP)
  14536.     BSR    PrintHexWord
  14537.     MOVEM.L    (SP)+,D0-D7/A0-A6
  14538.     ADD.L    #30,D6
  14539.     CMP.L    MaxPLSTOffset(PC),D6
  14540.     BHI    EndOfPLST
  14541.     ADD    #240,A5        ; Next Screen position
  14542.     DBF    D7,dtplstloop
  14543.     RTS
  14544.  
  14545. PLSTNext
  14546.     ADD.L    #30,D6
  14547.     CMP.L    MaxPLSTOffset(PC),D6
  14548.     BHI    EndOfPLST
  14549.     BRA    dtplstloop
  14550.  
  14551. EndOfPLST
  14552.     MOVE.L    #$FFFFFFFF,(A4)+
  14553.     MOVE    A5,TextOffset
  14554.     MOVE    #23,TextLength
  14555.     MOVE.L    #EmptyLineText,ShowTextPtr
  14556.     MOVEM.L    D0-D7/A0-A6,-(SP)
  14557.     BSR    SpaceShowText
  14558.     MOVEM.L    (SP)+,D0-D7/A0-A6
  14559.     ADD    #240,A5
  14560.     DBF    D7,EndOfPLST
  14561.     RTS
  14562.  
  14563. TypeInDisk1
  14564.     LEA    STText1Number(PC),A6
  14565.     MOVE    #156,LineCurX
  14566.     BRA    DoTypeInDisk
  14567.  
  14568. TypeInDisk2
  14569.     LEA    STText2Number(PC),A6
  14570.     MOVE    #204,LineCurX
  14571.     BRA    DoTypeInDisk
  14572.  
  14573. TypeInDisk3
  14574.     LEA    STText3Number(PC),A6
  14575.     MOVE    #252,LineCurX
  14576. DoTypeInDisk
  14577.     CLR.B    (A6)
  14578.     CLR.B    1(A6)
  14579.     JSR    StorePtrCol
  14580.     JSR    SetWaitPtrCol
  14581.     BSR    ShowDiskNames
  14582.     MOVE    #20,LineCurY
  14583.     BSR    UpdateLineCurPos
  14584.     BSR    GetHexKey
  14585.     TST.B    RawKeyCode
  14586.     BNE    ClearDiskNum
  14587.     BTST    #2,$DFF016
  14588.     BEQ    ClearDiskNum
  14589.     ADD    D1,D1
  14590.     LEA    FastHexTable+1(PC),A0
  14591.     MOVE.B    (A0,D1.W),(A6)
  14592.     ADDQ    #8,LineCurX
  14593.     BSR    ShowDiskNames
  14594.     BSR    UpdateLineCurPos
  14595.     JSR    GetHexKey
  14596.     TST.B    RawKeyCode
  14597.     BNE    ClearDiskNum
  14598.     BTST    #2,$DFF016
  14599.     BEQ    ClearDiskNum
  14600.     ADD    D1,D1
  14601.     LEA    FastHexTable+1(PC),A0
  14602.     MOVE.B    (A0,D1.W),1(A6)
  14603.     JSR    RestorePtrCol
  14604.     BSR    PLSTCheckNum
  14605.     BSR    RedrawPLST
  14606.     CLR    LineCurX
  14607.     MOVE    #270,LineCurY
  14608.     BRA    UpdateLineCurPos
  14609.  
  14610. ClearAllDisks
  14611.     BSR    DoClearDisks
  14612.     BSR    PLSTCheckNum
  14613.     BRA    RedrawPLST
  14614.  
  14615. DoClearDisks
  14616.     MOVEQ    #0,D0
  14617.     MOVE.B    D0,STText1Number
  14618.     MOVE.B    D0,STText1Number+1
  14619.     MOVE.B    D0,STText2Number
  14620.     MOVE.B    D0,STText2Number+1
  14621.     MOVE.B    D0,STText3Number
  14622.     MOVE.B    D0,STText3Number+1
  14623.     MOVE.B    D0,STText4Number
  14624.     MOVE.B    D0,STText4Number+1
  14625.     RTS
  14626.  
  14627. MountList
  14628.     JSR    StorePtrCol
  14629.     JSR    SetDiskPtrCol
  14630.     BSR    DoClearDisks
  14631.     MOVE    #1,MountFlag
  14632.     LEA    df0text(PC),A4
  14633.     BSR    DoMountList
  14634.     LEA    STText1(PC),A0
  14635.     BSR    CheckMountName
  14636.     LEA    df1text(PC),A4
  14637.     BSR    DoMountList
  14638.     LEA    STText2(PC),A0
  14639.     BSR    CheckMountName
  14640.     LEA    df2text(PC),A4
  14641.     BSR    DoMountList
  14642.     LEA    STText3(PC),A0
  14643.     BSR    CheckMountName
  14644. ;    LEA    df3text(PC),A4
  14645. ;    BSR    DoMountList
  14646. ;    LEA    STText4(PC),A0
  14647. ;    BSR    CheckMountName
  14648.     CLR    MountFlag
  14649.     JSR    RestorePtrCol
  14650.     BRA    cdisknum2
  14651.  
  14652. DoMountList
  14653.     CLR.L    FIB_FileName
  14654.     CLR.L    FIB_FileName+4
  14655.     CLR.L    FIB_FileName+8
  14656.     MOVE.L    DOSBase(PC),A6
  14657.     MOVE.L    A4,D1
  14658.     MOVEQ    #-2,D2
  14659.     JSR    LVOLock(A6)
  14660.     MOVE.L    D0,FileLock
  14661.     BEQ    MountError
  14662.     MOVE.L    FileLock(PC),D1
  14663.     MOVE.L    #FileInfoBlock,D2
  14664.     JSR    LVOExamine(A6)
  14665.     TST.L    D0
  14666.     BEQ    MountError
  14667.     MOVE.L    FileLock(PC),D1
  14668.     JSR    LVOUnLock(A6)
  14669. MountError
  14670.     MOVEQ    #-1,D0
  14671.     RTS
  14672.  
  14673. CheckMountName
  14674.     MOVE    FIB_FileName,D0
  14675.     BEQ    MountError
  14676.     MOVE    #'ST',D1    ; Check for ST
  14677.     AND    #$1F1F,D0
  14678.     AND    #$1F1F,D1
  14679.     CMP    D0,D1
  14680.     BNE    ClearDiskNum
  14681.     MOVE.B    FIB_FileName+3,D0
  14682.     LSL    #8,D0
  14683.     MOVE.B    FIB_FileName+4,D0
  14684.     CMP    #'00',D0
  14685.     BEQ    ClearDiskNum
  14686.     MOVE.B    D0,4(A0)    ; Put disk number into ST-xx
  14687.     LSR    #8,D0
  14688.     MOVE.B    D0,3(A0)
  14689.     MOVEQ    #0,D0
  14690.     RTS
  14691.  
  14692. ClearDiskNum
  14693.     CLR.B    RawKeyCode
  14694.     JSR    RestorePtrCol
  14695.     CLR.B    (A6)
  14696.     CLR.B    1(A6)
  14697.     CLR    LineCurX
  14698.     MOVE    #270,LineCurY
  14699.     BSR    UpdateLineCurPos
  14700. cdisknum2
  14701.     BSR    PLSTCheckNum
  14702.     BRA    RedrawPLST
  14703.  
  14704. df0text    dc.b 'DF0:',0,0
  14705. df1text    dc.b 'DF1:',0,0
  14706. df2text    dc.b 'DF2:',0,0
  14707. df3text    dc.b 'DF3:',0,0
  14708.  
  14709. CheckPLSTGadgs
  14710.     MOVEM.W    MouseX2(PC),D0/D1
  14711.     CMP    #120,D0
  14712.     BLO    cplstend
  14713.     CMP    #23,D1
  14714.     BHS    PLSTPressed
  14715.     CMP    #12,D1
  14716.     BHS    PLSTLine2
  14717. PLSTLine1
  14718.     CMP    #268,D0
  14719.     BHS    ExitPLST
  14720.     CMP    #168,D0
  14721.     BHS    cplstend
  14722.     CMP    #120,D0
  14723.     BHS    ClearAllDisks
  14724.     RTS
  14725.  
  14726. PLSTLine2
  14727.     CMP    #268,D0
  14728.     BHS    MountList
  14729.     CMP    #218,D0
  14730.     BHS    TypeInDisk3
  14731.     CMP    #168,D0
  14732.     BHS    TypeInDisk2
  14733.     BRA    TypeInDisk1
  14734. cplstend
  14735.     RTS
  14736.  
  14737. ExitPLST
  14738.     JSR    WaitForButtonUp
  14739.     CLR.B    RawKeyCode
  14740.     JSR    ClearRightArea
  14741.     JMP    DisplayMainScreen
  14742.  
  14743. PLSTOneUp
  14744.     TST    PresetMarkTotal
  14745.     BEQ    Return2
  14746.     BTST    #6,$BFE001
  14747.     BEQ    PLST_rts
  14748.     MOVE    PLSTpos,D0
  14749.     MOVE    D0,D2
  14750.     SUBQ    #1,D0
  14751.     TST    ShiftKeyStatus
  14752.     BNE.S    pouski2
  14753.     BTST    #2,$DFF016
  14754.     BNE    pouskip
  14755. pouski2    SUB    #9,D0
  14756. pouskip    TST    D0
  14757.     BPL    DoPLSTUpDown
  14758.     CLR    D0
  14759.     BRA    DoPLSTUpDown
  14760.  
  14761. PLSTOneDown
  14762.     TST    PresetMarkTotal
  14763.     BEQ    Return2
  14764.     BTST    #6,$BFE001
  14765.     BEQ    PLST_rts
  14766.     MOVE    PLSTpos(PC),D0
  14767.     MOVE    D0,D2
  14768.     ADDQ    #1,D0
  14769.     TST    ShiftKeyStatus
  14770.     BNE.S    podski2
  14771.     BTST    #2,$DFF016
  14772.     BNE    podskip
  14773. podski2    ADD    #9,D0
  14774. podskip    MOVE    PresetMarkTotal(PC),D1
  14775.     SUB    #12,D1
  14776.     CMP    D0,D1
  14777.     BHS    DoPLSTUpDown
  14778.     MOVE    D1,D0
  14779. DoPLSTUpDown
  14780.     BSR    UpdateOffset
  14781.     BRA    RedrawPLST
  14782.  
  14783. UpdateOffset
  14784.     MOVE    PLSTpos(PC),D1
  14785.     MOVE    D0,PLSTpos
  14786.     CMP    D0,D1
  14787.     BEQ    Return2
  14788.     TST    D0
  14789.     BEQ    ZeroPLSTOffset
  14790.     SUBQ    #1,D0
  14791.     MOVE.L    PLSTmem(PC),A0
  14792.     MOVEQ    #0,D6
  14793. cpoloop    CMP    #'ST',(A0,D6.L)    ; Check for 'ST'
  14794.     BEQ    NextPLSTOffset
  14795.     ADD.L    #30,D6
  14796.     BRA    cpoloop
  14797. NextPLSTOffset
  14798.     ADD.L    #30,D6
  14799.     DBF    D0,cpoloop
  14800.     MOVE.L    D6,PLSTOffset
  14801.     RTS
  14802.  
  14803. ZeroPLSTOffset
  14804.     CLR.L    PLSTOffset
  14805.     RTS
  14806.  
  14807. PLSTPressed
  14808.     CMP    #24,D1
  14809.     BLO    Return2
  14810.     CMP    #95,D1
  14811.     BHI    Return2
  14812.     SUB    #24,D1
  14813.     AND.L    #$0000FFFF,D1
  14814.     DIVU    #6,D1
  14815.     LSL    #2,D1
  14816.     LEA    PLSTOffset(PC),A0
  14817.     MOVE.L    (A0,D1.W),D1
  14818.     BMI    Return2
  14819.     DIVU    #30,D1
  14820.     ADDQ    #1,D1
  14821.     MOVE    D1,CurrentPreset
  14822.     JSR    WaitForButtonUp
  14823.     BRA    UsePreset
  14824.  
  14825. ;---- Preset Editor/PED ----
  14826.  
  14827. PresetEditor
  14828.     JSR    WaitForButtonUp
  14829.     MOVE    #4,CurrScreen
  14830.     ST     DisableAnalyzer
  14831.     ST    NoSampleInfo
  14832.     BSR    SwapPresEdScreen
  14833.     BEQ    pedexi2
  14834. PED_Refresh
  14835.     CLR    PED_Action
  14836.     MOVE.L    TextBplPtr(PC),A0
  14837.     MOVE    #1219,D0
  14838. pedloop    CLR.L    (A0)+
  14839.     DBF    D0,pedloop
  14840.     JSR    SetNormalPtrCol
  14841.     JSR    ClearAnalyzerColors
  14842.     BSR    ShowPEDnumbers
  14843.     BRA    ShowPresetNames
  14844.  
  14845. SwapPresEdScreen
  14846.     MOVE.L    DecompMemPtr,D0
  14847.     BEQ    speds2
  14848.     MOVE.L    D0,A1
  14849.     BSR    speds3
  14850.     BRA    FreeDecompMem
  14851. speds2    LEA    PresetEdData,A0
  14852.     BSR    Decompact
  14853.     BEQ    Return2
  14854. speds3    LEA    BitPlaneData,A0
  14855.     MOVEQ    #1,D2
  14856. spesloop1
  14857.     MOVE    #1219,D0
  14858. spesloop2
  14859.     MOVE.L    (A0),D1
  14860.     MOVE.L    (A1),(A0)+
  14861.     MOVE.L    D1,(A1)+
  14862.     DBF    D0,spesloop2
  14863.     LEA    $14F0(A0),A0
  14864.     DBF    D2,spesloop1
  14865.     MOVEQ    #-1,D0
  14866.     RTS
  14867.  
  14868. CheckPresEdGadgs
  14869.     MOVEM.W    MouseX2(PC),D0/D1
  14870.     CMP    #45,D1
  14871.     BHS    CheckPEDnames
  14872.     CLR    PED_Action
  14873.     JSR    SetNormalPtrCol
  14874.     CMP    #307,D0
  14875.     BHS    PED_GotoPLST
  14876. PED_Menu1
  14877.     CMP    #101,D0
  14878.     BHS    PED_Menu2
  14879.     CMP    #34,D1
  14880.     BHS    PED_DeleteDisk
  14881.     CMP    #23,D1
  14882.     BHS    PED_Delete
  14883.     CMP    #12,D1
  14884.     BHS    PED_Insert
  14885.     BRA    PED_AddPathGadg
  14886.  
  14887. PED_Menu2
  14888.     CMP    #209,D0
  14889.     BHS    PED_Menu3
  14890.     CMP    #34,D1
  14891.     BHS    PED_ClearPLST
  14892.      CMP    #23,D1
  14893.     BHS    Return2
  14894.      CMP    #12,D1
  14895.     BHS    PED_Disk
  14896.     BRA    PED_EnterPath
  14897.  
  14898. PED_Menu3
  14899.     CMP    #34,D1
  14900.     BHS    PED_Print
  14901.     CMP    #23,D1
  14902.     BHS    WritePLST
  14903.     CMP    #12,D1
  14904.     BHS.S    xLoadPLST
  14905.     BRA    PED_EnterPath
  14906.  
  14907. xLoadPLST
  14908.     BSR    LoadPLST
  14909.     MOVE    #1,PEDPos
  14910.     BRA    PED_Refresh
  14911.  
  14912. PED_GotoPLST
  14913.     BSR    PED_Exit
  14914.     BRA    PLST
  14915.  
  14916. PED_Exit
  14917.     JSR    WaitForButtonUp
  14918.     BSR    PLSTCheckNum
  14919.     BSR    SwapPresEdScreen
  14920.     MOVE.L    TextBplPtr(PC),A0
  14921.     MOVE    #1219,D0
  14922. pedeloop    CLR.L    (A0)+
  14923.     DBF    D0,pedeloop
  14924.     CLR.B    RawKeyCode
  14925. pedexi2    JSR    ClearAnalyzerColors
  14926.     JMP    DisplayMainAll
  14927.  
  14928. PED_AddPathGadg
  14929.     TST.L    PLSTmem
  14930.     BNE    pedawok
  14931.     BSR    AllocPLST
  14932.     TST.L    PLSTmem
  14933.     BEQ    PLSTMemErr
  14934. pedawok    MOVE.L    DOSBase(PC),A6
  14935.     MOVE.L    #PEdDefaultPath,D1
  14936.     MOVEQ    #-2,D2
  14937.     JSR    LVOLock(A6)
  14938.     MOVE.L    D0,FileLock
  14939.     BEQ    UnlockReadPath
  14940.     JSR    SetDiskPtrCol
  14941.     LEA    AddingPathText(PC),A0
  14942.     BSR    ShowStatusText
  14943.     MOVE.L    DOSBase(PC),A6
  14944.     MOVE.L    FileLock(PC),D1
  14945.     MOVE.L    #FileInfoBlock,D2
  14946.     JSR    LVOExamine(A6)
  14947.     TST.L    D0
  14948.     BPL    UnlockReadPath
  14949.     TST.L    FIB_EntryType
  14950.     BPL    CheckPathDirName
  14951.     BSR    AddPreset
  14952.     BRA    IsPLSTFull
  14953.  
  14954. CheckPathDirName
  14955.     CMP.B    #'-',FIB_FileName+2
  14956.     BNE    IsPLSTFull
  14957.     MOVE.B    FIB_FileName+3,SndDiskNum0
  14958.     MOVE.B    FIB_FileName+4,SndDiskNum1
  14959.     BSR    ShowPEDnumbers
  14960. IsPLSTFull
  14961.     MOVE    PresetTotal(PC),D0
  14962.     CMP    MaxPLSTEntries,D0
  14963.     BLO    ReadPathNext
  14964.     BSR    PLSTisFull
  14965.     BRA    ReadPathEnd
  14966.  
  14967. ReadPathNext
  14968.     MOVE.L    DOSBase,A6
  14969.     MOVE.L    FileLock(PC),D1
  14970.     MOVE.L    #FileInfoBlock,D2
  14971.     JSR    LVOExNext(A6)
  14972.     TST.L    D0
  14973.     BPL    ReadPathEnd
  14974.     BTST    #2,$DFF016
  14975.     BEQ    ReadPathEnd
  14976.     TST.L    FIB_EntryType
  14977.     BPL    IsPLSTFull
  14978.     CMP.L    #'.inf',FIB_FileName
  14979.     BEQ    IsPLSTFull
  14980.     CMP.L    #'.inf',FIB_FileName+4
  14981.     BEQ    IsPLSTFull
  14982. ;    LEA    FIB_FileName,A0
  14983. ;    MOVEQ    #28,D0
  14984. ;repalop    CMP.B    #'.',(A0)+
  14985. ;    BEQ    CouldBeInfo
  14986. ;    DBF    D0,repalop
  14987. rpnskip    CLR    PresetRepeat
  14988.     MOVE    #1,PresetReplen
  14989. ;    TST.B    IFFLoopFlag    ; name is ok, test for IFF
  14990.     BRA    rpnskp2
  14991. ;    LEA    PEDDefaultPath,A0
  14992.     JSR    CopyPath
  14993.     LEA    FIB_FileName,A0
  14994. rpncpfn    MOVE.B    (A0)+,(A1)+
  14995.     BNE.S    rpncpfn
  14996.     MOVE.L    #FileName,D1
  14997.     MOVE.L    #1005,D2
  14998.     MOVE.L    DOSBase(PC),A6
  14999.     JSR    LVOOpen(A6)
  15000.     MOVE.L    D0,FileHandle
  15001.     BEQ.S    rpnskp2
  15002.     MOVE.L    D0,D1
  15003.     LEA    chkiffbuffer(PC),A2
  15004.     CLR.L    (A2)
  15005.     MOVE.L    A2,D2
  15006.     MOVEQ    #12,D3
  15007.     JSR    LVORead(A6)
  15008.     CMP.L    #"FORM",(A2)
  15009.     BNE.S    rpnclse
  15010.     CMP.L    #"8SVX",8(A2)
  15011.     BNE.S    rpnclse
  15012. rpnvhdr    MOVE.L    FileHandle(PC),D1
  15013.     MOVE.L    A2,D2
  15014.     MOVEQ    #4,D3
  15015.     JSR    LVORead(A6)
  15016.     TST.L    D0
  15017.     BEQ.S    rpnclse
  15018.     CMP.L    #"VHDR",(A2)
  15019.     BNE.S    rpnvhdr
  15020.     MOVE.L    FileHandle(PC),D1
  15021.     MOVE.L    A2,D2
  15022.     MOVEQ    #12,D3
  15023.     JSR    LVORead(A6)
  15024.     MOVE.L    8(A2),D0
  15025.     BEQ.S    rpnclse
  15026.     LSR    #1,D0
  15027.     MOVE    D0,PresetReplen
  15028.     MOVE.L    4(A2),D0
  15029.     LSR    #1,D0
  15030.     MOVE    D0,PresetRepeat
  15031. rpnclse    MOVE.L    FileHandle(PC),D1
  15032.     JSR    LVOClose(A6)
  15033. rpnskp2    BSR    AddPreset
  15034.     BSR    ShowPEDnumbers
  15035.     BRA    IsPLSTFull
  15036.  
  15037. chkiffbuffer
  15038.     dc.l    0,0,0
  15039.  
  15040. CouldBeInfo
  15041.     CMP.B    #'i',(A0)+
  15042.     BNE    rpnskip
  15043.     CMP.B    #'n',(A0)+
  15044.     BNE    rpnskip
  15045.     CMP.B    #'f',(A0)+
  15046.     BNE    rpnskip
  15047.     CMP.B    #'o',(A0)+
  15048.     BNE    rpnskip
  15049.     CMP.B    #0,(A0)+
  15050.     BNE    rpnskip
  15051.     BRA    IsPLSTFull
  15052.  
  15053. ReadPathEnd
  15054.     MOVE.L    DOSBase(PC),A6
  15055.     MOVE.L    FileLock(PC),D1
  15056.     BEQ    rpeskip
  15057.     JSR    LVOUnLock(A6)
  15058. rpeskip    JSR    SetNormalPtrCol
  15059.     BSR    ShowPresetNames
  15060.     BRA    ShowAllRight
  15061.  
  15062. UnlockReadPath
  15063.     MOVE.L    DOSBase(PC),A6
  15064.     MOVE.L    FileLock(PC),D1
  15065.     BEQ    urpend
  15066.     JSR    LVOUnLock(A6)
  15067. urpend    JMP    SetErrorPtrCol
  15068.  
  15069. AddPreset
  15070.     LEA    PEdDefaultVol(PC),A0
  15071.     LEA    PresetName(PC),A1
  15072.     MOVEQ    #21,D0
  15073. .loop    CLR.B    (A1)+
  15074.     DBF    D0,.loop
  15075.     LEA    PresetName(PC),A1
  15076.     MOVEQ    #5,D0    ; Disk ST-XX:
  15077. aploop    MOVE.B    (A0)+,(A1)+
  15078.     DBF    D0,aploop
  15079.  
  15080.     LEA    FIB_FileName,A0
  15081.     MOVEQ    #14,D0    ; Name 16 letters.
  15082. aploop2    MOVE.B    (A0)+,D1
  15083.     BEQ    .skip
  15084.     MOVE.B    D1,(A1)+
  15085.     DBF    D0,aploop2
  15086. .skip    CLR.B    (A1)
  15087.  
  15088.     MOVE.L    FIB_FileSize,D0
  15089.     CMP.L    #$FFFE,D0
  15090.     BLS.S    apskip2
  15091.     MOVE    #$FFFE,D0
  15092. apskip2    LSR    #1,D0
  15093.     MOVE    D0,PresetLength
  15094.     CLR    PresetFineTune
  15095.     LEA    PresetName(PC),A6
  15096.     BSR    PED_CheckAdd
  15097.     ADDQ    #1,PresetTotal
  15098.     ADD.L    #30,MaxPLSTOffset
  15099.     RTS
  15100.  
  15101. PED_Insert
  15102.     TST.L    PLSTmem
  15103.     BNE    pediwok
  15104.     BSR    AllocPLST
  15105.     TST.L    PLSTmem
  15106.     BEQ    PLSTMemErr
  15107. pediwok    MOVE    PresetTotal(PC),D0
  15108.     CMP    MaxPLSTEntries2,D0
  15109.     BHS    PLSTisFull
  15110.     LEA    InsertPsetText(PC),A0
  15111.     LEA    PresetName(PC),A1
  15112.     MOVEQ    #39,D0
  15113. pediloop
  15114.     MOVE.B    (A0)+,(A1)+
  15115.     DBF    D0,pediloop
  15116. PossibleEdit
  15117.     JSR    StorePtrCol
  15118.     JSR    SetWaitPtrCol
  15119.     MOVE.L    TextBplPtr(PC),A0
  15120.     LEA    2320(A0),A0
  15121.     MOVEQ    #59,D0
  15122. pediloop2
  15123.     CLR.L    (A0)+
  15124.     DBF    D0,pediloop2
  15125.     LEA    EnterDataText(PC),A0
  15126.     BSR    ShowStatusText
  15127.     MOVE    #63,LineCurY
  15128.     LEA    PresetName(PC),A6
  15129.     MOVEQ    #3,D7
  15130.     MOVE.B    #4,EnterTextFlag
  15131. ShowPsetText
  15132.     LEA    PresetName+3(PC),A0
  15133.     MOVEQ    #37,D0
  15134.     MOVE    #2321,D1
  15135.     BSR    ShowText3
  15136.     MOVE    D7,D0
  15137.     SUBQ    #3,D0
  15138.     ASL    #3,D0
  15139.     ADD    #12,D0
  15140.     MOVE    D0,LineCurX
  15141.     BSR    UpdateLineCurPos
  15142. pediwaitkey
  15143.     JSR    DoKeyBuffer
  15144.     MOVE.B    RawKeyCode(PC),D0
  15145.     BEQ    pediwaitkey
  15146.     CLR.B    RawKeyCode
  15147.     BTST    #7,D0
  15148.     BNE    pediwaitkey
  15149.     AND    #$FF,D0
  15150.     CMP.B    #69,D0
  15151.     BEQ    PED_ESCkey
  15152.     CMP.B    #65,D0
  15153.     BEQ    PED_BkspaceKey
  15154.     CMP.B    #68,D0
  15155.     BEQ    PED_ReturnKey
  15156.     CMP.B    #79,D0
  15157.     BEQ    PED_LeftArrowKey
  15158.     CMP.B    #78,D0
  15159.     BEQ    PED_RightArrowKey
  15160.     CMP.B    #64,D0
  15161.     BHI    pediwaitkey
  15162.     CMP    #40,D7
  15163.     BEQ    pediwaitkey
  15164.     CMP    #22,D7
  15165.     BEQ    pediwaitkey
  15166.     LEA    UnshiftedKeymap(PC),A0
  15167.     TST    ShiftKeyStatus
  15168.     BEQ    ShiftKeySkip
  15169.     LEA    ShiftedKeymap(PC),A0
  15170. ShiftKeySkip
  15171.     MOVE.B    0(A0,D0.W),D1
  15172.     BEQ    pediwaitkey
  15173.  
  15174.     CMP    #6,D7
  15175.     BLO.S    hexchk2
  15176.     CMP    #25,D7
  15177.     BLO    PED_PrintChar
  15178. hexchk2    CMP.B    #'0',D1
  15179.     BLO    pediwaitkey
  15180.     CMP.B    #'f',D1
  15181.     BHI    pediwaitkey
  15182.     CMP.B    #'9',D1
  15183.     BLS    PED_PrintChar
  15184.     CMP.B    #'a',D1
  15185.     BHS    PED_PrintChar
  15186.     BRA    pediwaitkey
  15187.  
  15188. PED_PrintChar
  15189.     MOVE.B    D1,(A6,D7.W)
  15190.     BRA    PED_RightArrowKey
  15191.  
  15192. PED_ReturnKey
  15193.     CMP.B    #' ',PsetNameText
  15194.     BEQ    PED_ESCkey
  15195.     LEA    PsetVolText(PC),A0
  15196.     LEA    fitutexttab+32(PC),A1
  15197.     MOVE.B    (A0)+,D1
  15198.     LSL    #8,D1
  15199.     MOVE.B    (A0),D1
  15200.     MOVEQ    #15,D0
  15201. vofloop    CMP    -(A1),D1
  15202.     BEQ.S    vofound
  15203.     DBF    D0,vofloop
  15204.     MOVEQ    #0,D0
  15205. vofound    MOVE    D0,PresetFineTune
  15206.     LEA    PsetLenText(PC),A0
  15207.     BSR    HexToInteger
  15208.     LSR    #1,D0
  15209.     MOVE    D0,PresetLength
  15210.     LEA    PsetRepeatText(PC),A0
  15211.     BSR    HexToInteger
  15212.     LSR    #1,D0
  15213.     MOVE    D0,PresetRepeat
  15214.     LEA    PsetReplenText(PC),A0
  15215.     BSR    HexToInteger
  15216.     LSR    #1,D0
  15217.     MOVE    D0,PresetReplen
  15218.     BSR    PED_CheckAdd
  15219.     ADDQ    #1,PresetTotal
  15220. PED_ESCkey
  15221.     CLR    LineCurX
  15222.     MOVE    #270,LineCurY
  15223.     BSR    UpdateLineCurPos
  15224.     BSR    ShowPresetNames
  15225.     BSR    ShowPEDnumbers
  15226.     BSR    ShowAllRight
  15227.     CLR.B    EnterTextFlag
  15228.     JMP    RestorePtrCol
  15229.  
  15230. PED_BkspaceKey
  15231.     CMP    #23,D7
  15232.     BHS    pedbsend
  15233.     CMP    #6,D7
  15234.     BLS    pedbsend
  15235.     SUBQ    #1,D7
  15236.     MOVE.B    #' ',(A6,D7.W)
  15237. pedbsend
  15238.     BRA    ShowPsetText
  15239.  
  15240. PED_LeftArrowKey
  15241.     SUBQ    #1,D7
  15242.     CMP    #2,D7
  15243.     BLS    pedlakskip2
  15244.     CMP    #5,D7
  15245.     BEQ    pedlakskip
  15246.     CMP    #22,D7
  15247.     BEQ    pedlakskip
  15248.     CMP    #25,D7
  15249.     BEQ    pedlakskip
  15250.     CMP    #30,D7
  15251.     BEQ    pedlakskip
  15252.     CMP    #35,D7
  15253.     BEQ    pedlakskip
  15254.     BRA    ShowPsetText
  15255.  
  15256. pedlakskip
  15257.     SUBQ    #1,D7
  15258.     BRA    ShowPsetText
  15259.  
  15260. pedlakskip2
  15261.     MOVEQ    #3,D7
  15262.     BRA    ShowPsetText
  15263.  
  15264. PED_RightArrowKey
  15265.     ADDQ    #1,D7
  15266.     CMP    #5,D7
  15267.     BEQ    pedrakskip
  15268.     CMP    #22,D7
  15269.     BEQ    pedrakskip
  15270.     CMP    #25,D7
  15271.     BEQ    pedrakskip
  15272.     CMP    #30,D7
  15273.     BEQ    pedrakskip
  15274.     CMP    #35,D7
  15275.     BEQ    pedrakskip
  15276.     CMP    #40,D7
  15277.     BHS    pedrakskip2
  15278.     BRA    ShowPsetText
  15279.  
  15280. pedrakskip
  15281.     ADDQ    #1,D7
  15282.     BRA    ShowPsetText
  15283.  
  15284. pedrakskip2
  15285.     MOVEQ    #39,D7
  15286.     BRA    ShowPsetText
  15287.  
  15288. PED_CheckAdd
  15289.     MOVEQ    #23,D0
  15290. pedcaloop
  15291.     SUBQ    #1,D0
  15292.     CMP.B    #' ',0(A6,D0.W)
  15293.     BEQ    pedcaloop
  15294.     CLR.B    1(A6,D0.W)
  15295.     MOVE.L    PLSTmem(PC),A5
  15296.     LEA    30(A5),A5
  15297. pedccnextloop
  15298.     MOVEQ    #6,D0
  15299.     TST.B    6(A5)
  15300.     BEQ    PED_AddPreset
  15301. PED_ConvertLoop
  15302.     MOVE.B    0(A5,D0.W),D2
  15303.     BNE    PED_ConvertCase
  15304.     TST.B    0(A6,D0.W)
  15305.     BNE    PED_ConvertCase
  15306.     CLR.B    6(A5)
  15307.     SUBQ    #1,PresetTotal
  15308.     BRA    PED_AddPreset
  15309.  
  15310. PED_ConvertCase
  15311.     CMP.B    #'A',D2
  15312.     BLO    pedccskip
  15313.     CMP.B    #'Z',D2
  15314.     BHI    pedccskip
  15315.     ADD.B    #32,D2
  15316. pedccskip
  15317.     MOVE.B    0(A6,D0.W),D1
  15318.     CMP.B    #' ',D1
  15319.     BEQ    pedccskip3
  15320.     CMP.B    #'A',D1
  15321.     BLO    pedccskip2
  15322.     CMP.B    #'Z',D1
  15323.     BHI    pedccskip2
  15324.     ADD.B    #32,D1
  15325. pedccskip2
  15326.     CMP.B    D2,D1
  15327.     BEQ    pedccnext
  15328.     BHI    pedccskip3
  15329.     BRA    PED_AddPreset
  15330.  
  15331. pedccnext
  15332.     ADDQ    #1,D0
  15333.     CMP    #22,D0
  15334.     BNE    PED_ConvertLoop
  15335. pedccskip3
  15336.     LEA    30(A5),A5
  15337.     BRA    pedccnextloop
  15338.  
  15339. PED_AddPreset
  15340.     TST.B    6(A5)
  15341.     BEQ    pedapskip
  15342.     MOVE.L    PLSTmem(PC),A1
  15343.     MOVE    PresetTotal(PC),D0
  15344.     CMP    #1,D0
  15345.     BEQ    pedapskip
  15346.     MULU    #30,D0
  15347.     ADD.L    D0,A1
  15348.     LEA    30(A1),A1
  15349.     CLR.B    31(A1)
  15350. pedaploop
  15351.     MOVE    (A1),30(A1)
  15352.     SUBQ.L    #2,A1
  15353.     CMP.L    A1,A5
  15354.     BLS    pedaploop
  15355. pedapskip
  15356.     MOVEQ    #21,D0
  15357. pedaploop2
  15358.     MOVE.B    0(A6,D0.W),D1
  15359.     CMP.B    #'A',D1
  15360.     BLO    pedapskip2
  15361.     CMP.B    #'Z',D1
  15362.     BHI    pedapskip2
  15363.     ADD.B    #32,D1
  15364. pedapskip2
  15365.     CMP.B    #' ',D1
  15366.     BNE    pedapskip3
  15367.     MOVEQ    #0,D1
  15368. pedapskip3
  15369.     MOVE.B    D1,0(A5,D0.W)
  15370.     DBF    D0,pedaploop2
  15371.     MOVE    PresetLength(PC),22(A5)
  15372.     MOVE.B    PresetFineTune+1(PC),24(A5)
  15373.     MOVE.B    #$40,25(A5)
  15374.     MOVE    PresetRepeat(PC),26(A5)
  15375.     MOVE    PresetReplen(PC),28(A5)
  15376.     RTS
  15377.  
  15378. HexToInteger
  15379.     MOVEQ    #0,D0
  15380.     BSR    Single_hti
  15381.     LSL    #8,D1
  15382.     LSL    #4,D1
  15383.     OR    D1,D0
  15384.     BSR    Single_hti
  15385.     LSL    #8,D1
  15386.     OR    D1,D0
  15387. HexToInteger2
  15388.     BSR    Single_hti
  15389.     LSL    #4,D1
  15390.     OR    D1,D0
  15391.     BSR    Single_hti
  15392.     OR    D1,D0
  15393.     RTS
  15394.  
  15395. Single_hti
  15396.     MOVEQ    #0,D1
  15397.     MOVE.B    (A0)+,D1
  15398.     CMP.B    #$60,D1
  15399.     BLO    shtiskip
  15400.     SUB.B    #$20,D1
  15401. shtiskip
  15402.     SUB.B    #$30,D1
  15403.     CMP.B    #9,D1
  15404.     BLS    Return2
  15405.     SUBQ.B    #7,D1
  15406.     RTS
  15407.  
  15408. PED_Delete
  15409.     JSR    SetDeletePtrCol
  15410.     MOVE    #1,PED_Action
  15411.     LEA    SelectEntryText(PC),A0
  15412.     BRA    ShowStatusText
  15413.  
  15414. PED_ClearPLST
  15415.     LEA    ClearPLSTText,A0
  15416.     JSR    AreYouSure
  15417.     BNE    Return2
  15418.     BSR    FreePLST
  15419.     BRA    PED_Refresh
  15420.  
  15421. ClearPLSTText    dc.b 'clear plst ?',0,0
  15422.  
  15423. PED_Print
  15424.     LEA    PrintPLSTText,A0
  15425.     JSR    AreYouSure
  15426.     BNE    Return2
  15427.     JSR    StorePtrCol
  15428.     MOVE.L    DOSBase(PC),A6
  15429.     MOVE.L    #PrintPath,D1
  15430.     MOVE.L    #1006,D2
  15431.     JSR    LVOOpen(A6)
  15432.     MOVE.L    D0,FileHandle
  15433.     BEQ    CantOpenFile
  15434.     JSR    SetDiskPtrCol
  15435.     MOVE.L    D0,D1
  15436.     MOVE.L    #PsetPLSTtext,D2
  15437.     MOVEQ    #56,D3
  15438.     JSR    LVOWrite(A6)
  15439.     LEA    PrintingPLSTText(PC),A0
  15440.     BSR    ShowStatusText
  15441.     CLR    PsetNumTemp
  15442. pedpmainloop
  15443.     MOVE    PsetNumTemp(PC),D0
  15444.     LEA    PsetPrtNumText(PC),A0
  15445.     BSR    IntToDecASCII
  15446.     MOVE.L    PLSTmem(PC),A0
  15447.     MOVE    PsetNumTemp(PC),D0
  15448.     MULU    #30,D0
  15449.     ADD.L    D0,A0
  15450.     MOVE.L    A0,PsetPtrTemp
  15451.     LEA    PsetPrtNameText(PC),A1
  15452.     MOVE.L    A1,A2
  15453.     MOVEQ    #19,D1
  15454. FillSpaceLoop
  15455.     MOVE.B    #' ',(A2)+
  15456.     DBF    D1,FillSpaceLoop
  15457.     MOVEQ    #19,D1
  15458. pedploop
  15459.     TST.B    (A0)
  15460.     BEQ    pedpskip
  15461.     MOVE.B    (A0)+,(A1)+
  15462.     DBF    D1,pedploop
  15463. pedpskip
  15464.     MOVE.L    PsetPtrTemp(PC),A1
  15465.     MOVE    22(A1),D0
  15466.     LEA    PsetPrtLenText(PC),A0
  15467.     BSR    IntToHexASCII
  15468.     MOVE.L    PsetPtrTemp(PC),A1
  15469.     MOVE    26(A1),D0
  15470.     LEA    PsetPrtRepeatText(PC),A0
  15471.     BSR    IntToHexASCII
  15472.     MOVE.L    PsetPtrTemp(PC),A1
  15473.     MOVE    28(A1),D0
  15474.     ADD    D0,D0
  15475.     LEA    PsetPrtRepLenText(PC),A0
  15476.     BSR    IntToHexASCII
  15477.     MOVE.L    FileHandle(PC),D1
  15478.     MOVE.L    #PsetPrtNumText,D2
  15479.     MOVEQ    #53,D3
  15480.     JSR    LVOWrite(A6)
  15481.     BTST    #2,$DFF016
  15482.     BEQ    AbortPLSTPrint
  15483.     ADDQ    #1,PsetNumTemp
  15484.     MOVE    PsetNumTemp(PC),D0
  15485.     CMP    PresetTotal(PC),D0
  15486.     BNE    pedpmainloop
  15487.     BRA    pedpend
  15488.  
  15489. AbortPLSTPrint
  15490.     LEA    OprAbortedText(PC),A0
  15491.     BSR    ShowStatusText
  15492.     JSR    SetErrorPtrCol
  15493. pedpend    MOVE.L    FileHandle(PC),D1
  15494.     JSR    LVOClose(A6)
  15495.     BSR    ShowAllRight
  15496.     JMP    RestorePtrCol
  15497.  
  15498. IntToDecASCII
  15499.     MOVEQ    #3,D3
  15500.     MOVE.L    #1000,D2
  15501. itdloop    EXT.L    D0
  15502.     DIVU    D2,D0
  15503.     ADD.B    #'0',D0
  15504.     MOVE.B    D0,(A0)+
  15505.     DIVU    #10,D2
  15506.     SWAP    D0
  15507.     DBF    D3,itdloop
  15508.     RTS
  15509.  
  15510. IntToHex2
  15511.     MOVEQ    #1,D2
  15512.     BRA    ithaloop
  15513.  
  15514. IntToHexASCII
  15515.     MOVEQ    #3,D2
  15516. ithaloop
  15517.     MOVE    D0,D1
  15518.     AND.B    #15,D1
  15519.     CMP.B    #10,D1
  15520.     BLO    ithaskip
  15521.     ADDQ.B    #7,D1
  15522. ithaskip
  15523.     ADD.B    #'0',D1
  15524.     MOVE.B    D1,-(A0)
  15525.     ROR    #4,D0
  15526.     DBF    D2,ithaloop
  15527.     RTS
  15528.  
  15529. WritePLST
  15530.     LEA    SavePLSTText,A0
  15531.     JSR    AreYouSure
  15532.     BNE    Return2
  15533.     JSR    StorePtrCol
  15534.     JSR    SetDiskPtrCol
  15535.     LEA    SavingPLSTText(PC),A0
  15536.     BSR    ShowStatusText
  15537.     LEA    PTPath,A0
  15538.     JSR    CopyPath
  15539.     LEA    PLSTName(PC),A0
  15540.     MOVEQ    #4,D0
  15541. dsploop    MOVE.B    (A0)+,(A1)+
  15542.     DBF    D0,dsploop
  15543.     MOVE.L    #FileName,D1
  15544.     MOVE.L    #1006,D2
  15545.     MOVE.L    DOSBase(PC),A6
  15546.     JSR    LVOOpen(A6)
  15547.     MOVE.L    D0,D7
  15548.     BEQ    CantOpenFile
  15549.     MOVE.L    D0,D1
  15550.     MOVE.L    PLSTmem(PC),D2
  15551.     MOVE    PresetTotal(PC),D3
  15552.     MULU    #30,D3
  15553.     JSR    LVOWrite(A6)
  15554.     MOVE.L    D7,D1
  15555.     JSR    LVOClose(A6)
  15556.     BSR    ShowAllRight
  15557.     JMP    RestorePtrCol
  15558.  
  15559. CheckPEDnames
  15560.     CMP    #307,D0
  15561.     BLO    PED_PsetHit
  15562.     CLR    PED_Action
  15563.     JSR    SetNormalPtrCol
  15564.     CMP    #122,D1
  15565.     BHS    Return2
  15566.     CMP    #111,D1
  15567.     BHS    PED_Bottom
  15568.     CMP    #100,D1
  15569.     BHS.S    PED_OneDown
  15570.     CMP    #67,D1
  15571.     BHS    PED_Exit
  15572.     CMP    #56,D1
  15573.     BHS.S    PED_OneUp
  15574.     BRA.S    PED_Top
  15575.  
  15576. PED_OneUp
  15577.     SUBQ    #1,PEDPos
  15578.     TST    ShiftKeyStatus
  15579.     BNE.S    poup2
  15580.     BTST    #2,$DFF016
  15581.     BNE.S    pedouskip
  15582. poup2    SUBQ    #7,PEDPos
  15583. pedouskip
  15584.     CMP    #1,PEDPos
  15585.     BGE    ShowPresetNames
  15586. PED_Top    MOVE    #1,PEDPos
  15587.     BRA    ShowPresetNames
  15588.  
  15589. PED_OneDown
  15590.     CMP    #9,PresetTotal
  15591.     BLO    ShowPresetNames
  15592.     ADDQ    #1,PEDPos
  15593.     TST    ShiftKeyStatus
  15594.     BNE.S    podn2
  15595.     BTST    #2,$DFF016
  15596.     BNE.S    pedodskip
  15597. podn2    ADDQ    #7,PEDPos
  15598. pedodskip
  15599.     MOVE    PresetTotal,D0
  15600.     SUB    #10,D0
  15601.     CMP    PEDPos,D0
  15602.     BHS    ShowPresetNames
  15603. pedodsx    MOVE    D0,PEDPos
  15604.     BRA    ShowPresetNames
  15605.  
  15606. PED_Bottom
  15607.     MOVE    PresetTotal(PC),D0
  15608.     SUB    #11,D0
  15609.     BMI.S    PED_Top
  15610.     ADDQ    #1,D0
  15611.     BRA.S    pedodsx
  15612.  
  15613. ShowPresetNames
  15614.     MOVE    #2321,D6
  15615.     MOVEQ    #9,D7
  15616.     MOVE.L    PLSTmem(PC),D0
  15617.     BEQ    Return2
  15618.     MOVE.L    D0,A5
  15619.     MOVE    PEDPos(PC),D0
  15620.     MULU    #30,D0
  15621.     ADD.L    D0,A5
  15622. spndploop
  15623.     TST.B    (A5)
  15624.     BEQ    Return2
  15625.     LEA    PresetNameText,A1
  15626.     MOVEQ    #21,D0
  15627. spnloop    MOVE.B    #' ',(A1)+
  15628.     DBF    D0,spnloop
  15629.     MOVE.L    A5,A0
  15630.     ADDQ.L    #3,A0
  15631.     LEA    -22(A1),A1
  15632. spnloop2
  15633.     MOVE.B    (A0)+,D0
  15634.     BEQ.S    DisplayPreset
  15635.     MOVE.B    D0,(A1)+
  15636.     BRA.S    spnloop2
  15637.  
  15638. fitutexttab
  15639.     dc.b " 0+1+2+3+4+5+6+7-8-7-6-5-4-3-2-1"
  15640.  
  15641. DisplayPreset
  15642.     MOVEQ    #19,D0
  15643.     LEA    PresetNameText,A0
  15644.     MOVE    D6,D1
  15645.     BSR    ShowText3
  15646.     ADD    #20,D6
  15647.     MOVE    D6,TextOffset
  15648.     MOVEQ    #0,D0
  15649.     MOVE.B    24(A5),D0
  15650.     AND.B    #$0F,D0
  15651.     ADD    D0,D0
  15652.     LEA    fitutexttab(PC,D0.W),A0
  15653.     MOVE    #2,TextLength
  15654.     BSR    ShowText2
  15655.     MOVE    22(A5),D0
  15656.     ADD    D0,D0
  15657.     MOVE    D0,WordNumber
  15658.     ADDQ    #1,TextOffset
  15659.     BSR    PrintHexWord
  15660.     MOVE    26(A5),D0
  15661.     ADD    D0,D0
  15662.     MOVE    D0,WordNumber
  15663.     ADDQ    #1,TextOffset
  15664.     BSR    PrintHexWord
  15665.     MOVE    28(A5),D0
  15666.     ADD    D0,D0
  15667.     MOVE    D0,WordNumber
  15668.     ADDQ    #1,TextOffset
  15669.     BSR    PrintHexWord
  15670.     ADD    #220,D6   ; 218
  15671.     LEA    30(A5),A5
  15672.     DBF    D7,spndploop
  15673.     RTS
  15674.  
  15675. PED_EnterPath
  15676.     JSR    StorePtrCol
  15677.     JSR    SetWaitPtrCol
  15678.     CLR.L    EditMode
  15679.     LEA    PEdDefaultPath(PC),A6
  15680.     JSR    UpdateLineCurPos
  15681.     MOVE.L    A6,TextEndPtr
  15682.     MOVE.L    A6,ShowTextPtr
  15683.     ADD.L    #31,TextEndPtr
  15684.     MOVE    #20,TextLength
  15685.     MOVE.L    #178,A4
  15686.     BSR    GetTextLine
  15687.     CLR.L    TextEndPtr
  15688.     JMP    RestorePtrCol
  15689.  
  15690. PED_Disk
  15691.     JSR    StorePtrCol
  15692.     JSR    SetWaitPtrCol
  15693.     CLR.L    EditMode
  15694.     CLR.B    SndDiskNum0
  15695.     CLR.B    SndDiskNum1
  15696.     LEA    SndDiskNum0(PC),A6
  15697.     MOVE.L    A6,TextEndPtr
  15698.     MOVE.L    A6,ShowTextPtr
  15699.     ADDQ.L    #2,TextEndPtr
  15700.     MOVE    #2,TextLength
  15701.     MOVE.L    #621,A4
  15702.     MOVE.B    #3,EnterTextFlag
  15703.     BSR    GetTextLine
  15704.     LEA    SndDiskNum0(PC),A6
  15705.     MOVE.B    #':',2(A6)
  15706.     CLR.B    EnterTextFlag
  15707.     CLR.L    TextEndPtr
  15708.     JMP    RestorePtrCol
  15709.  
  15710. ShowPEDnumbers
  15711.     MOVE    PresetTotal,WordNumber
  15712.     MOVE    #1061,TextOffset
  15713.     BSR    Print4DecDigits
  15714.     LEA    PEdDefaultPath,A0
  15715.     MOVE    #178,D1
  15716.     MOVEQ    #20,D0
  15717.     BSR    ShowText3
  15718.     LEA    PEdDefaultVol,A0
  15719.     MOVE    #618,D1
  15720.     MOVEQ    #6,D0
  15721.     BRA    ShowText3
  15722.  
  15723. PED_PsetHit
  15724.     CMP    #1,PresetTotal
  15725.     BEQ.S    pedphend
  15726.     MOVE    MouseY2(PC),D0
  15727.     CMP    #59,D0
  15728.     BLO.S    pedphend
  15729.     CMP    #119,D0
  15730.     BHS.S    pedphend
  15731.     SUB    #59,D0
  15732.     DIVU    #6,D0
  15733.     MOVE.L    D0,D1
  15734.     SWAP    D1
  15735.     CMP    #5,D1
  15736.     BEQ.S    pedphend
  15737.     MOVE    D0,D2
  15738.     ADD    PEDPos(PC),D2
  15739.     CMP    PresetTotal(PC),D2
  15740.     BHI.S    pedphend
  15741.     MULU    #30,D0
  15742.     MOVE.L    PLSTmem(PC),A5
  15743.     ADD.L    D0,A5
  15744.     MOVE    PEDPos(PC),D0
  15745.     MULU    #30,D0
  15746.     ADD.L    D0,A5
  15747.     TST    PED_Action
  15748.     BEQ.S    PED_CopyName
  15749.     CMP    #1,PED_Action
  15750.     BEQ    PED_DoDelete
  15751. pedphend
  15752.     RTS
  15753.  
  15754. PED_CopyName
  15755.     LEA    PresetName(PC),A0
  15756.     MOVEQ    #21,D0
  15757. pedcnloop
  15758.     MOVE.B    (A5)+,D1
  15759.     BNE    pedcnskip
  15760.     MOVE.B    #' ',D1
  15761. pedcnskip
  15762.     MOVE.B    D1,(A0)+
  15763.     DBF    D0,pedcnloop
  15764.     MOVEQ    #0,D0
  15765.     MOVE.B    2(A5),D0
  15766.     AND.B    #$0F,D0
  15767.     ADD    D0,D0
  15768.     LEA    fitutexttab(PC),A1
  15769.     LEA    (A1,D0.W),A1
  15770.     LEA    PsetVolText(PC),A0
  15771.     MOVE.B    #' ',-1(A0)
  15772.     MOVE.B    (A1)+,(A0)+
  15773.     MOVE.B    (A1),(A0)
  15774.     MOVE    (A5),D0
  15775.     ADD    D0,D0
  15776.     LEA    6(A0),A0
  15777.     BSR    IntToHexASCII
  15778.     MOVE    4(A5),D0
  15779.     ADD    D0,D0
  15780.     LEA    9(A0),A0
  15781.     BSR    IntToHexASCII
  15782.     LEA    9(A0),A0
  15783.     MOVE    6(A5),D0
  15784.     ADD    D0,D0
  15785.     BSR    IntToHexASCII
  15786.     BRA    PossibleEdit
  15787.  
  15788. PED_DoDelete
  15789.     CLR    PED_Action
  15790.     LEA    DeletePresetText,A0
  15791.     JSR    AreYouSure
  15792.     BNE    Return2
  15793.     MOVE.L    PLSTmem(PC),A1
  15794.     MOVE    PresetTotal(PC),D0
  15795.     MULU    #30,D0
  15796.     ADD.L    D0,A1
  15797. pedddloop
  15798.     MOVE    30(A5),(A5)
  15799.     ADDQ.L    #2,A5
  15800.     CMP.L    A5,A1
  15801.     BHI.S    pedddloop
  15802.     CLR.B    (A5)
  15803.     SUBQ    #1,PresetTotal
  15804.     SUB.L    #30,MaxPLSTOffset
  15805.     MOVE    PEDPos(PC),D0
  15806.     ADD    #9,D0
  15807.     CMP    PresetTotal(PC),D0
  15808.     BHI.S    pedddskip
  15809.     SUBQ    #1,PEDPos
  15810. pedddskip
  15811.     BSR    ShowPEDnumbers
  15812.     BSR    ShowPresetNames
  15813.     JSR    SetNormalPtrCol
  15814.     JMP    StorePtrCol
  15815.  
  15816. sepc    JMP    SetErrorPtrCol
  15817.  
  15818. PLSTisFull
  15819.     LEA    PLSTFullText(PC),A0
  15820.     BSR    ShowStatusText
  15821.     JMP    SetErrorPtrCol
  15822.  
  15823. PED_DeleteDisk
  15824.     LEA    DelDiskText(PC),A0
  15825.     MOVE.B    SndDiskNum0(PC),10(A0)
  15826.     MOVE.B    SndDiskNum1(PC),11(A0)
  15827.     JSR    AreYouSure
  15828.     BNE    Return2
  15829.     JSR    StorePtrCol
  15830.     JSR    SetWaitPtrCol
  15831.     MOVE.L    PLSTmem(PC),A0
  15832.     MOVE.L    A0,A1
  15833.     MOVE    PresetTotal(PC),D0
  15834.     MULU    #30,D0
  15835.     ADD.L    D0,A1
  15836.     MOVE.L    SndDiskNum0-1(PC),D1
  15837.     MOVE.L    #$FF5F5FFF,D2
  15838.     AND.L    D2,D1
  15839. peddslo    MOVE.L    2(A0),D0
  15840.     AND.L    D2,D0
  15841.     CMP.L    D1,D0
  15842.     BNE.S    peddsno
  15843.     MOVE.L    A0,A2
  15844. peddslp    MOVE    30(A0),(A0)+
  15845.     CMP.L    A1,A0
  15846.     BLO.S    peddslp
  15847.     SUBQ    #1,PresetTotal
  15848.     SUB.L    #30,MaxPLSTOffset
  15849.     MOVE.L    A2,A0
  15850.     BRA.S    peddsn1
  15851. peddsno    LEA    30(A0),A0
  15852. peddsn1    CMP.L    A1,A0
  15853.     BLO.S    peddslo
  15854.     MOVE    #1,PEDPos
  15855.     BSR    ShowPEDnumbers
  15856.     BSR    ShowPresetNames
  15857.     JMP    RestorePtrCol
  15858.  
  15859. DelDiskText    dc.b "Delete ST-.. ?",0,0
  15860.  
  15861. ;************  MIDI Routines  ************
  15862.  
  15863. *  Apollon MIDI Routines V0.2               *
  15864. *  V0.2 04/07-1991 First version            *
  15865.  
  15866. _RVOAllocMiscResource =  -6
  15867. _RVOFreeMiscResource  = -12
  15868.  
  15869. OpenMIDI
  15870.     TST.L    MIDIinBuffer
  15871.     BNE.S    omidisk
  15872.     MOVE.L    #256,D0
  15873.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  15874.     MOVE.L    4.W,A6
  15875.     JSR    LVOAllocMem(A6)
  15876.     MOVE.L    D0,MIDIinBuffer
  15877.     BEQ    Return2
  15878. omidisk    CLR.B    MIDIinTo
  15879.     CLR.B    MIDIinFrom
  15880.  
  15881.     BSR.S    .GetSer2        ;got the port?
  15882.     BEQ.S    .end            ;yes
  15883.     MOVE.L    4.W,A6            ;no..try to flush serial.device:
  15884.     JSR    LVOForbid(A6)
  15885.     LEA    DeviceList(A6),A0    ;ExecBase->DeviceList
  15886.     LEA    SerDevName(PC),a1    ;"serial.device"
  15887.     JSR    LVOFindName(A6)
  15888.     TST.L    D0
  15889.     BEQ.S    .notfnd            ;no serial.device!!
  15890.     MOVE.L    D0,A1
  15891.     JSR    LVORemDevice(A6)
  15892. .notfnd    JSR    LVOPermit(A6)
  15893.     BSR.S    .GetSer2        ;now try it again...
  15894. .end    RTS
  15895.  
  15896. .GetSer2
  15897.     MOVE.L    4.W,A6
  15898.     MOVEQ    #0,D0
  15899.     LEA    MiscResName(PC),a1
  15900.     JSR    LVOOpenResource(A6)
  15901.     MOVE.L    D0,MiscResBase
  15902.     BEQ    .gs_err
  15903.     MOVE.L    D0,A6
  15904.     LEA    rb_ProgName,A1
  15905.     MOVEQ    #0,D0        ;serial port
  15906.     JSR    _RVOAllocMiscResource(A6)
  15907.     TST.L    D0
  15908.     BNE.S    .gs_err
  15909.     ST.B    SerPortAlloc
  15910.     CLR    PrevBits
  15911.     MOVE    $DFF01C,D0
  15912.     BTST    #0,D0
  15913.     SNE.B    PrevBits
  15914.     BTST    #11,D0
  15915.     SNE.B    PrevBits+1
  15916.     MOVEQ    #0,D0        ;TBE
  15917.     LEA    MIDIOutInterrupt(PC),A1
  15918.     MOVE.L    4.W,A6
  15919.     JSR    LVOSetIntVector(A6)
  15920.     MOVE.L    D0,PrevTBE
  15921.     MOVEQ    #11,D0        ;RBF
  15922.     LEA    MIDIInInterrupt(pc),A1
  15923.     JSR    LVOSetIntVector(A6)
  15924.     MOVE.L    D0,PrevRBF
  15925.     MOVE    #114,$DFF032    ;set baud rate 114/31250 (SERPER)
  15926.     MOVE    #$8801,$DFF09A    ;RBF & TBE on!!
  15927.  
  15928.     MOVE    #30000,D0
  15929. .lolo    MOVE    #$0F0,$DFF180
  15930.     DBF    D0,.lolo
  15931.     MOVEQ    #0,D0
  15932.     RTS
  15933.  
  15934. .gs_err    MOVE    #30000,D0
  15935. .lplp    MOVE    #$F00,$DFF180
  15936.     DBF    D0,.lplp
  15937.     MOVEQ    #-1,D0
  15938.     RTS
  15939.  
  15940.  
  15941. ;----- Close MIDI and release serial port -----
  15942.  
  15943. CloseMIDI
  15944.     MOVE.L    MIDIinBuffer(PC),D0
  15945.     BEQ.S    clmskip
  15946.     MOVE.L    D0,A1
  15947.     MOVE.L    #256,D0
  15948.     MOVE.L    4.W,A6
  15949.     JSR    LVOFreeMem(A6)
  15950.     CLR.L    MIDIinBuffer
  15951. clmskip
  15952.     TST.L    MiscResBase
  15953.     BEQ.S    .fs_end
  15954.     TST.B    SerPortAlloc
  15955.     BEQ.S    .fs_end
  15956.     MOVE    #$0801,$dff09a    ;disable RBF & TBE
  15957.     MOVE.L    PrevTBE(PC),a1
  15958.     MOVEQ    #0,D0
  15959.     MOVE.L    4.W,A6
  15960.     JSR    LVOSetIntVector(A6)
  15961.     MOVE.L    PrevRBF(PC),a1
  15962.     MOVEQ    #11,D0
  15963.     JSR    LVOSetIntVector(A6)
  15964.     MOVE    #$8000,D0
  15965.     TST.B    PrevBits
  15966.     BEQ.S    .fs1
  15967.     BSET    #0,D0
  15968. .fs1    TST.B    PrevBits+1
  15969.     BEQ.S    .fs2
  15970.     BSET    #11,D0
  15971. .fs2    MOVE    D0,$DFF09A    ;set RBF & TBE to their prev. values
  15972.     MOVE.L    MiscResBase(PC),A6
  15973.     MOVEQ    #0,D0        ;serial port
  15974.     JSR    _RVOFreeMiscResource(A6)
  15975.     CLR.B    SerPortAlloc
  15976.     CLR.B    lastcmdbyte
  15977. .fs_end    RTS
  15978.  
  15979. mintflag dc.w 0
  15980.  
  15981.  
  15982. ;----- Every time we receive a MIDI byte -----
  15983.  
  15984. MIDIInIntHandler
  15985.     MOVE    $DFF018,D0 ; read from serdatr
  15986.     MOVE    #$0800,$DFF09C ;intreq
  15987.  
  15988.     MOVE    #$F00,$DFF180
  15989.  
  15990.     MOVEM.L    D1-D2,-(SP)
  15991. gmiskip    MOVEQ    #0,D1
  15992.     MOVE.B    4(A1),D1 ; in to
  15993.     MOVE.L    D1,D2
  15994.     ADDQ.B    #1,D2
  15995.     CMP.B    5(A1),D2 ; in from
  15996.     BEQ    gmiexit    ; Buffer overflow
  15997.     MOVE.L    (A1),A0 ; midi in buffer
  15998.     MOVE.B    D0,(A0,D1.W)
  15999.     MOVE.B    D2,4(A1); MIDIinTo
  16000. gmiexit    MOVEM.L    (SP)+,D1-D2
  16001.     RTS
  16002.  
  16003.  
  16004. ;----- MIDI Transmit Buffer Empty Interrupt (Output) -----
  16005.  
  16006. MIDIOutIntHandler
  16007.     MOVE    #$4000,intena(A0)    ;disable int.
  16008.     ADDQ.B    #1,IDNestCnt(A6)    ;turn off multitasking
  16009.     MOVE    #1,intreq(A0)        ;clear intreq bit
  16010.     MOVE.B    bytesinbuff(PC),D0
  16011.     BEQ.S    exsih            ;buffer empty
  16012.     MOVE.L    4(A1),A5        ;get buffer read pointer
  16013.     MOVE    #$100,D1        ;Stop bit
  16014.     MOVE.B    (A5),D1            ;get byte
  16015.     MOVE    D1,$030(A0)        ;and push it out!!
  16016.     ADDQ.L    #1,A5            ;add 1
  16017.     CMP.L    A1,A5            ;shall we reset ptr??
  16018.     BNE.S    nbufptr            ;not yet..
  16019.     LEA    sendbuffer(PC),A5
  16020. nbufptr    SUBQ.B    #1,D0            ;one less bytes in buffer
  16021.     MOVE.B    D0,bytesinbuff        ;remember it
  16022.     MOVE.L    A5,4(A1)        ;push new read pointer back
  16023. exsih    SUBQ.B    #1,IDNestCnt(A6)    ;multitasking back on
  16024.     BGE.S    exsih0
  16025.     MOVE    #$C000,intena(A0)
  16026. exsih0    RTS
  16027.  
  16028. ;----- Send data to MIDI Out or to output buffer -----
  16029. ; A0=ptr to data, D0=length
  16030.  
  16031. AddMIDIData
  16032.     TST.B    SerPortAlloc
  16033.     BEQ.S    retamd
  16034.     MOVE.L    A2,-(SP)
  16035.     MOVE.L    4.W,A6
  16036.     MOVE    #$4000,$DFF09A    ;Disable interrupts
  16037.     ADDQ.B    #1,IDNestCnt(A6)
  16038.     MOVE.B    bytesinbuff(pc),D1
  16039.     BNE.S    noTBEreq
  16040.     MOVE    #$8001,$DFF09C    ;request TBE
  16041. noTBEreq
  16042.     LEA    buffptr(PC),A2    ;end of buffer (ptr)
  16043.     MOVE.L    (A2),A1        ;buffer pointer
  16044. adddataloop
  16045.     MOVE.B    (A0)+,D1    ;get byte
  16046.     BPL.S    norscheck    ;this isn't a status byte
  16047.     CMP.B    #$EF,D1        ;forget system messages
  16048.     BHI.S    norscheck
  16049.     CMP.B    lastcmdbyte(PC),D1 ;same as previos status byte??
  16050.     BEQ.S    samesb        ;yes, skip
  16051.     MOVE.B    D1,lastcmdbyte    ;no, don't skip but remember!!
  16052. norscheck
  16053.     MOVE.B    D1,(A1)+    ;push it to midi send buffer
  16054.     ADDQ.B    #1,bytesinbuff
  16055. samesb    CMP.L    A2,A1    ;end of buffer??
  16056.     BNE.S    noresbuffptr    ;no, no!!
  16057.     LEA    sendbuffer(pc),a1 ;better reset it to avoid trashing
  16058. noresbuffptr
  16059.     SUBQ.B    #1,D0
  16060.     BNE.S    adddataloop
  16061.     MOVE.L    A1,(A2)        ;push new buffer ptr back
  16062. overflow
  16063.     SUBQ.B    #1,IDNestCnt(A6)
  16064.     BGE.S    retamd1
  16065.     MOVE    #$C000,$DFF09A    ;enable interrupts again
  16066. retamd1    MOVE.L    (SP)+,A2
  16067. retamd    RTS
  16068.  
  16069. PrevTBE        dc.l    0
  16070. PrevRBF        dc.l    0    
  16071. PrevBits    dc.b    0,0
  16072.  
  16073. MIDIOutInterrupt
  16074.     dc.l    0,0
  16075.     dc.b    2,0
  16076.     dc.l    MIDIOutName,buffptr,MIDIOutIntHandler
  16077.  
  16078. MIDIInInterrupt
  16079.     dc.l    0,0
  16080.     dc.b    2,0
  16081.     dc.l    MIDIInName,MIDIinBuffer,MIDIInIntHandler
  16082.  
  16083. buffptr        dc.l    sendbuffer
  16084. readbuffptr    dc.l    sendbuffer
  16085. sendbuffer    ds.b    128
  16086.  
  16087. SerPortAlloc    dc.b    0
  16088. bytesinbuff    dc.b    0
  16089. MiscResBase    dc.l    0
  16090. lastcmdbyte    dc.b    0
  16091.         even
  16092.  
  16093. MIDIOutName    dc.b    'PT MIDI Out',0
  16094. MIDIInName    dc.b    'PT MIDI In',0
  16095. MiscResName    dc.b    'misc.resource',0
  16096. SerDevName    dc.b    'serial.device',0
  16097.         even
  16098.  
  16099.  
  16100. ;----- read from input buffer -----
  16101.  
  16102. MIDIin    MOVE.B    MIDIinFrom(PC),D0
  16103.     CMP.B    MIDIinTo(PC),D0
  16104.     BNE    migetbyt
  16105.     MOVEQ    #2,D1
  16106.     RTS
  16107. migetbyt
  16108.     MOVE.L    MIDIinBuffer(PC),A0
  16109.     MOVE.L    A0,$7FFF0
  16110.     MOVE.B    (A0,D0.W),D0
  16111.     ADDQ.B    #1,MIDIinFrom
  16112.     MOVEQ    #0,D1
  16113.     RTS
  16114.  
  16115. CheckMIDIin
  16116.     TST.B    MIDIFlag
  16117.     BEQ    Return2
  16118.     BSR    MIDIin
  16119.     TST.L    D1
  16120.     BEQ    mic_ok
  16121.     MOVE.B    #1,MIDIError
  16122.     RTS
  16123.  
  16124. mic_ok    CLR.B    MIDIError
  16125.     TST.B    D0
  16126.     BPL    mic_databyte
  16127. ;statusbyte here
  16128.     CMP.B    #$F0,D0
  16129.     BHS    MIDISysMessage
  16130.     MOVE.B    D0,MIDIRunStatus
  16131.     MOVE.B    D0,D1
  16132.     AND.B    #$F0,D1
  16133.     MOVE.B    D1,MIDIRunCommand
  16134.     AND.B    #$0F,D0
  16135.     MOVE.B    D0,MIDIRunChannel
  16136.     CLR.B    MIDIByteCount
  16137.     RTS
  16138.  
  16139. mic_databyte
  16140.     MOVE.B    MIDIRunCommand(PC),D1
  16141.     CMP.B    #$80,D1
  16142.     BEQ    M_NoteOff
  16143.     CMP.B    #$90,D1
  16144.     BEQ    M_NoteOn
  16145.     CMP.B    #$A0,D1
  16146.     BEQ    M_PolyTouch
  16147.     CMP.B    #$B0,D1
  16148.     BEQ    M_Control
  16149.     CMP.B    #$C0,D1
  16150.     BEQ    M_ProgChange
  16151.     CMP.B    #$D0,D1
  16152.     BEQ    M_MonoTouch
  16153.     CMP.B    #$E0,D1
  16154.     BEQ    M_PitchBend
  16155.     CMP.B    #$F0,D1
  16156.     BEQ    M_SysExData
  16157.     RTS
  16158.  
  16159. M_NoteOff
  16160.     TST.B    MIDIByteCount
  16161.     BNE    mnf_veloc
  16162.     MOVE.B    D0,MIDINote
  16163.     ADD.B    #1,MIDIByteCount
  16164.     RTS
  16165. mnf_veloc
  16166.     CLR.B    MIDIByteCount
  16167.     MOVE.B    D0,MIDIVelocity
  16168. ;    BSR    MidiPlay
  16169.     RTS
  16170.  
  16171. M_NoteOn
  16172.     MOVE    #$F0F,$DFF180
  16173.     TST.B    MIDIByteCount
  16174.     BNE    mno_veloc
  16175.     MOVE.B    D0,MIDINote
  16176.     ADD.B    #1,MIDIByteCount
  16177.     RTS
  16178. mno_veloc
  16179.     CLR.B    MIDIByteCount
  16180.     MOVE.B    D0,MIDIVelocity
  16181.     BEQ    mnf_veloc
  16182. ;* MidiPlay *
  16183.     MOVE.B    MIDINote,D0
  16184.     CMP.B    MIDIinTrans,D0
  16185.     BLO    miplskip
  16186.     SUB.B    MIDIinTrans(PC),D0
  16187.     CMP.B    #36,D0
  16188.     BLS    J_nkp
  16189.     RTS
  16190. miplskip
  16191.     CMP.B    XMIDI_Play,D0
  16192.     BEQ    J_PlaySong
  16193.     CMP.B    XMIDI_Pattern,D0
  16194.     BEQ    J_PlayPattern
  16195.     CMP.B    XMIDI_Edit,D0
  16196.     BEQ    J_Edit
  16197.     CMP.B    XMIDI_Record,D0
  16198.     BEQ    J_RecordPattern
  16199.     CMP.B    XMIDI_Stop,D0
  16200.     BEQ    J_StopIt
  16201.     RTS
  16202.  
  16203. J_nkp    JMP    nkpskip
  16204. J_PlaySong
  16205.     JMP    PlaySong
  16206. J_PlayPattern
  16207.     JMP    PlayPattern
  16208. J_Edit    JMP    Edit
  16209. J_RecordPattern
  16210.     JMP    RecordPattern
  16211. J_StopIt
  16212.     JMP    StopIt
  16213.  
  16214. MIDIinTrans    dc.b 60,0
  16215.  
  16216. XMIDI_Play    dc.b 40 ; E
  16217. XMIDI_Pattern    dc.b 38 ; D
  16218. XMIDI_Edit    dc.b 43 ; G
  16219. XMIDI_Record    dc.b 41 ; F
  16220. XMIDI_Stop    dc.b 36 ; C
  16221.         dc.b 0 ; free 0
  16222.  
  16223. M_PolyTouch
  16224.     TST.B    MIDIByteCount
  16225.     BNE    mpt_touch
  16226.     MOVE.B    D0,MIDINote
  16227.     ADD.B    #1,MIDIByteCount
  16228.     RTS
  16229. mpt_touch
  16230.     CLR.B    MIDIByteCount
  16231.     MOVE.B    D0,MIDITouch
  16232.     RTS
  16233.  
  16234. M_Control
  16235.     TST.B    MIDIByteCount
  16236.     BNE    mc_value
  16237.     MOVE.B    D0,MIDIController
  16238.     ADD.B    #1,MIDIByteCount
  16239.     RTS
  16240. mc_value
  16241.     CLR.B    MIDIByteCount
  16242.     MOVE.B    D0,MIDIlsb
  16243.     RTS
  16244.  
  16245. M_ProgChange
  16246.     MOVE.B    D0,MIDIProgram
  16247.     RTS
  16248. ;    ADDQ.B    #1,D0
  16249. ;    AND.B    #$1F,D0
  16250. ;    BNE    mpchskip
  16251. ;    TST    InsNum
  16252. ;    BEQ    mpchskip
  16253. ;    MOVE    InsNum(PC),LastInsNum
  16254. ;mpchskip
  16255. ;    MOVE.B    D0,InsNum+1
  16256. ;    BRA    ShowSampleInfo
  16257.  
  16258. M_MonoTouch
  16259.     MOVE.B    D0,MIDITouch
  16260.     RTS
  16261.  
  16262. M_PitchBend
  16263.     TST.B    MIDIByteCount
  16264.     BNE    mp_msb
  16265.     MOVE.B    D0,MIDIlsb
  16266.     ADD.B    #1,MIDIByteCount
  16267.     RTS
  16268. mp_msb    CLR.B    MIDIByteCount
  16269.     MOVE.B    D0,MIDImsb
  16270.     EXT    D0
  16271.     SUB    #128,D0
  16272.     MOVE    CurrentPlayNote,D1
  16273.     SUB    D0,D1
  16274.     CMP    #113,D1
  16275.     BLS.S    mp_2
  16276.     MOVE    #113,D1
  16277. mp_2    MOVE.L    NoteAddr,A0
  16278.     MOVE    D1,6(A0)
  16279.     RTS
  16280.  
  16281. NoteAddr    dc.l 0
  16282.  
  16283. M_rts    RTS
  16284.  
  16285. MIDISysMessage
  16286.     CMP.B    #$F0,D0
  16287.     BEQ    M_SysEx        ; System Exclusive
  16288.     CMP.B    #$F1,D0
  16289.     BEQ    M_rts    ; Quarter Frame (MIDI Time Code)
  16290.     CMP.B    #$F2,D0
  16291.     BEQ    M_SongPos    ; Song Position Pointer
  16292.     CMP.B    #$F3,D0
  16293.     BEQ    M_SongSelect    ; Song Select
  16294.     CMP.B    #$F4,D0
  16295.     BEQ    M_rts    ; -Reserved-
  16296.     CMP.B    #$F5,D0
  16297.     BEQ    M_rts    ; -Reserved-
  16298.     CMP.B    #$F6,D0
  16299.     BEQ    M_rts    ; -Reserved-
  16300.     CMP.B    #$F7,D0
  16301.     BEQ    M_EOX        ; End of System Exclusive
  16302.     CMP.B    #$F8,D0
  16303.     BEQ    M_rts    ; MIDI Timing Clock
  16304.     CMP.B    #$F9,D0
  16305.     BEQ    M_rts    ; -Reserved-
  16306.     CMP.B    #$FA,D0
  16307.     BEQ    M_Start        ; Start Message
  16308.     CMP.B    #$FB,D0
  16309.     BEQ    M_Continue    ; Continue Message
  16310.     CMP.B    #$FC,D0
  16311.     BEQ    M_Stop        ; Stop Message
  16312.     CMP.B    #$FD,D0
  16313.     BEQ    M_rts    ; --- Reserved ---
  16314.     CMP.B    #$FE,D0
  16315.     BEQ    M_rts    ; Active Sensing (Each 300ms if on)
  16316.     CMP.B    #$FF,D0
  16317.     BRA    M_rts    ; System Reset Message
  16318.  
  16319. M_SysEx        RTS
  16320. M_SysExData    RTS
  16321. M_SongPos    RTS
  16322. M_SongSelect    RTS
  16323. M_EOX        RTS
  16324.  
  16325. M_Start        JMP    PlaySong
  16326. M_Continue    RTS
  16327. M_Stop        JMP    StopIt
  16328.  
  16329. MIDIinBuffer    dc.l 0
  16330. MIDIinTo    dc.b 0
  16331. MIDIinFrom    dc.b 0
  16332.  
  16333. MIDIRunStatus    dc.b $80
  16334. MIDIRunChannel    dc.b 0
  16335. MIDIRunCommand    dc.b $08
  16336. MIDIByteCount    dc.b 0
  16337.  
  16338. MIDINote    dc.b 0
  16339. MIDIVelocity    dc.b 0
  16340. MIDITouch    dc.b 0
  16341. MIDIController    dc.b 0
  16342. MIDImsb        dc.b 0
  16343. MIDIlsb        dc.b 0
  16344. MIDIProgram    dc.b 0
  16345. MIDIError    dc.b 0
  16346.  
  16347.  
  16348. ;---- Sampler Screen ----
  16349.  
  16350. SamplerScreen
  16351.     CLR.B    RawKeyCode
  16352.     JSR    WaitForButtonUp
  16353.     TST    SamScrEnable
  16354.     BNE    ExitFromSam
  16355.     MOVE    #1,SamScrEnable
  16356.     MOVE.L    EditMode(PC),SaveEditMode
  16357.     CLR.L    EditMode
  16358.  
  16359.     MOVE.L    TextBplPtr(PC),A0
  16360.     LEA    5560(A0),A0
  16361.     MOVE.L    A0,D0
  16362.     LEA    CopList2Bpl4Ptr,A1
  16363.     MOVE    D0,6(A1)
  16364.     SWAP    D0
  16365.     MOVE    D0,2(A1)
  16366.  
  16367.     MOVEQ    #0,D0
  16368.     MOVE    #270,D1
  16369.     MOVEQ    #14,D2
  16370.     LEA    CursorSpriteData,A0
  16371.     BSR    SetSpritePos
  16372.     JSR    SetSamSpritePtrs
  16373.     MOVE    CopCol0+16,CopList2+18
  16374.     BSR    SwapSamScreen
  16375.     BEQ    exisam2
  16376.     BSR    ClearSamScr
  16377.     JSR    DoShowFreeMem
  16378.     BSR    ShowSamNote
  16379.     BSR    ShowResamNote
  16380.     BRA    RedrawSample
  16381.  
  16382. ExitFromSam
  16383.     JSR    WaitForButtonUp
  16384.     MOVE.L    SamMemPtr,D0
  16385.     BEQ    exisam2
  16386.     MOVE.L    D0,A1
  16387.     BSR    Bjarne
  16388.     BSR.S    FreeDecompMem2
  16389. exisam2    JSR    SetDefSpritePtrs
  16390.     CLR.B    RawKeyCode
  16391.     CLR    SamScrEnable
  16392.     MOVEQ    #-1,D0
  16393.     MOVE.L    D0,MarkStartOfs
  16394.     MOVE.L    SaveEditMode(PC),EditMode
  16395.     BSR    SetScreenColors2
  16396.     JSR    SetupVUCols
  16397.     BSR    SetScrPatternPos
  16398.     BSR    ClearSamScr
  16399.     JSR    UpdateCursorPos
  16400.     JSR    SetTempo
  16401.     BRA    RedrawPattern
  16402.  
  16403. FreeDecompMem2
  16404.     MOVE.L    SamMemPtr,D0
  16405.     BEQ    Return2
  16406.     MOVE.L    D0,A1
  16407.     MOVE.L    SamMemSize,D0
  16408.     CLR.L    SamMemPtr
  16409.     MOVE.L    4.W,A6
  16410.     JSR    LVOFreeMem(A6)
  16411.     RTS
  16412.  
  16413. DecompactSam
  16414.     MOVE.L    A0,CompPtr
  16415.     MOVE.L    D0,CompLen
  16416.     BSR.S    FreeDecompMem2
  16417.     MOVE.L    CompPtr(PC),A0
  16418.     CMP.L    #'FORM',(A0)
  16419.     BEQ    DecompactSIFF
  16420.     MOVE.L    (A0),D0
  16421.     MOVE.L    D0,SamMemSize
  16422.     MOVEQ    #0,D1
  16423.     MOVE.L    4.W,A6
  16424.     JSR    LVOAllocMem(A6)
  16425.     MOVE.L    D0,SamMemPtr
  16426.     BEQ    OutOfMemErr
  16427.     MOVE.L    D0,A1
  16428.     MOVE.L    CompPtr(PC),A0
  16429.     MOVE.L    CompLen(PC),D0
  16430.     ADDQ.L    #4,A0
  16431.     SUBQ.L    #4,D0
  16432. dcmlop3    MOVE.B    (A0)+,D1
  16433.     CMP.B    #181,D1
  16434.     BEQ.S    DecodeIt3
  16435.     MOVE.B    D1,(A1)+
  16436. decom3    SUBQ.L    #1,D0
  16437.     CMP.L    #0,D0
  16438.     BGT.S    dcmlop3
  16439.     MOVE.L    SamMemPtr(PC),A1
  16440.     MOVEQ    #-1,D0
  16441.     RTS
  16442.  
  16443. DecodeIt3
  16444.     MOVEQ    #0,D1
  16445.     MOVE.B    (A0)+,D1
  16446.     MOVE.B    (A0)+,D2
  16447. dcdlop3    MOVE.B    D2,(A1)+
  16448.     DBF    D1,dcdlop3
  16449.     SUBQ.L    #2,D0
  16450.     BRA.S    decom3
  16451.  
  16452.  
  16453.  
  16454. ; --- if crunched IFF then go 4 it!!
  16455.  
  16456. DecompactSIFF
  16457.     MOVE.L    A0,pic_buf
  16458.     MOVEM.L    D0-7/A0-A6,-(SP)
  16459.     BSR    iff_search
  16460.     MOVEM.L    (SP)+,D0-7/A0-6
  16461.     MOVE    width_bytes(pc),D0
  16462.     MULU    height(pc),D0
  16463.     MULU    planes_num(pc),D0
  16464.     MOVE.L    D0,SamMemSize
  16465.     MOVE.L    #$10000,D1
  16466.     MOVE.L    4.W,A6
  16467.     JSR    LVOAllocMem(A6)
  16468.     MOVE.L    D0,SamMemPtr
  16469.     BEQ    OutOfMemErr
  16470.     MOVE.L    D0,bitplane        ;store where to decompact into
  16471.     BSR    colors_init
  16472.     BSR    unpacker
  16473.     MOVE.L    SamMemPtr,A1
  16474.     MOVEQ    #-1,D0
  16475.     RTS
  16476.  
  16477. SwapSamScreen
  16478.     LEA    SampScreenData,A0
  16479.     BSR    DecompactSam
  16480.     BEQ    Return2
  16481.  
  16482. bjasize=134*10
  16483. Bjarne    LEA    BitPlaneData+SamScrPos,A0
  16484.     MOVEQ    #1,D2
  16485. BjaLop1    MOVE    #bjasize-1,D1 ; 134
  16486. BjaLop2    MOVE.L    (A0),D0
  16487.     MOVE.L    (A1),(A0)+
  16488.     MOVE.L    D0,(A1)+
  16489.     DBF    D1,BjaLop2
  16490.     ADD.L    #PlaneSize-bjasize*4,A0
  16491.     DBF    D2,BjaLop1
  16492.  
  16493.     LEA    CopListInsPos,A0
  16494.     LEA    CopList2,A1
  16495.     MOVEQ    #29,D1
  16496. BjaLoop    MOVE    (A0),D0
  16497.     MOVE    (A1),(A0)+
  16498.     MOVE    D0,(A1)+
  16499.     DBF    D1,BjaLoop
  16500.     MOVEQ    #-1,D0
  16501.     RTS
  16502.  
  16503. ClearSamScr
  16504.     MOVE    #5121,TextOffset
  16505.     MOVE    #2,TextLength
  16506.     MOVE.L    #blnktxt,ShowTextPtr
  16507.     BSR    ShowText
  16508.     MOVE    #TempoNumPos,TextOffset
  16509.     MOVE    #3,TextLength
  16510.     BSR    ShowText
  16511.     MOVE    #130*10-1,D0
  16512.     MOVE.L    TextBplPtr,A0
  16513.     LEA    5560(A0),A0
  16514.     MOVE.L    A0,LineScreen
  16515.     MOVEQ    #0,D1
  16516. clrsslp    MOVE.L    D1,(A0)+
  16517.     DBF    D0,clrsslp
  16518.     RTS
  16519.  
  16520. blnktxt    dc.b "    "
  16521.  
  16522. ClearSamArea
  16523.     MOVE    #64*10-1,D0
  16524.     MOVE.L    TextBplPtr,A0
  16525.     LEA    5560(A0),A0
  16526.     MOVE.L    A0,LineScreen
  16527.     MOVEQ    #0,D1
  16528. clrsare    MOVE.L    D1,(A0)+
  16529.     DBF    D0,clrsare
  16530.     RTS
  16531.  
  16532. CheckSamGadgets
  16533.     MOVEM.W    MouseX2,D0/D1
  16534.     CMP    #139,D1
  16535.     BLO    SamTopBar
  16536.     CMP    #139+64,D1
  16537.     BLO    SamplePressed
  16538.     CMP    #201+11,D1
  16539.     BLO    SamDragBar
  16540.     CMP    #201+22,D1
  16541.     BLO    SamMenu1
  16542.     CMP    #201+33,D1
  16543.     BLO    SamMenu2
  16544.     CMP    #201+44,D1
  16545.     BLO    SamMenu3
  16546.     CMP    #201+66,D1
  16547.     BLO    SamMenu4
  16548.     RTS
  16549.  
  16550. SamTopBar
  16551.     CMP    #32,D0
  16552.     BLO    ExitFromSam
  16553.     RTS
  16554.  
  16555. SamMenu1
  16556.     CMP    #32,D0
  16557.     BLO    Return2
  16558.     CMP    #96,D0
  16559.     BLO    PlayWaveform
  16560.     CMP    #176,D0
  16561.     BLO    ShowRange
  16562.     CMP    #246,D0
  16563.     BLO    ZoomOut
  16564.     BRA    DispBox
  16565.  
  16566. SamMenu2
  16567.     CMP    #32,D0
  16568.     BLO    StopPlaying
  16569.     CMP    #96,D0
  16570.     BLO    PlayDisplay
  16571.     CMP    #176,D0
  16572.     BLO    ShowAll
  16573.     CMP    #246,D0
  16574.     BLO    RangeAll
  16575.     BRA    LoopToggle
  16576.  
  16577. SamMenu3
  16578.     CMP    #32,D0
  16579.     BLO    StopPlaying
  16580.     CMP    #96,D0
  16581.     BLO    PlayRange
  16582.     CMP    #109,D0            ;116
  16583.     BLO    CurToStart
  16584.     CMP    #122,D0
  16585.     BLO    CurToMid
  16586.     CMP    #136,D0            ;136
  16587.     BLO    CurToEnd
  16588.     CMP    #176,D0
  16589.     BLO    SwapBuffer
  16590.     CMP    #210,D0
  16591.     BLO    sh_BigMonitor
  16592.     CMP    #246,D0
  16593.     BLO    Sampler
  16594.     BRA    SetSamNote
  16595.  
  16596. sh_BigMonitor
  16597.     jmp    BigMonitor
  16598.  
  16599. SamMenu4
  16600.     CMP    #32,D0
  16601.     BLO    SamCut
  16602.     CMP    #64,D0
  16603.     BLO    SamCopy
  16604.     CMP    #96,D0
  16605.     BLO    SamPaste
  16606.     CMP    #136,D0
  16607.     BLO    RampVolume
  16608.     CMP    #176,D0
  16609.     BLO    TuningTone
  16610.     CMP    #246,D0
  16611.     BLO    Resample
  16612.     BRA    SetResamNote
  16613.  
  16614.  
  16615. PlayWaveform
  16616.     JSR    PlayNote
  16617.     JMP    WaitForButtonUp
  16618. PlayDisplay
  16619.     LEA    SampleInfo,A0
  16620.     MOVE.L    SamOffSet(PC),StartOfs
  16621.     MOVE.L    SamDisplay(PC),D0
  16622.     LSR.L    #1,D0
  16623.     MOVE    D0,(A0)
  16624.     CLR    4(A0)
  16625.     MOVE    #1,6(A0)
  16626.     MOVE    PlayInsNum,-(SP)
  16627.     CLR    PlayInsNum
  16628.     JSR    PlayNote
  16629.     MOVE    (SP)+,PlayInsNum
  16630.     BSR    ShowSampleInfo
  16631.     JMP    WaitForButtonUp
  16632. PlayRange
  16633.     MOVE.L    MarkStartOfs(PC),D1
  16634.     BMI    NoRangeError
  16635.     MOVE.L    MarkEndOfs(PC),D0
  16636.     CMP.L    D0,D1
  16637.     BEQ    LargerRangeError
  16638.     LEA    SampleInfo,A0
  16639.     MOVE.L    D1,StartOfs
  16640.     SUB.L    D1,D0
  16641.     LSR.L    #1,D0
  16642.     MOVE    D0,(A0)
  16643.     CLR    4(A0)
  16644.     MOVE    #1,6(A0)
  16645.     MOVE    PlayInsNum,-(SP)
  16646.     CLR    PlayInsNum
  16647.     JSR    PlayNote
  16648.     MOVE    (SP)+,PlayInsNum
  16649.     BSR    ShowSampleInfo
  16650.     JMP    WaitForButtonUp
  16651. StopPlaying
  16652.     BRA    TurnOffVoices
  16653.  
  16654. StartOfs
  16655.     dc.l    0
  16656.  
  16657. ;----
  16658.  
  16659. ShowRange
  16660.     MOVE.L    MarkStartOfs(PC),D0
  16661.     BMI    NoRangeError
  16662.     MOVE.L    MarkEndOfs(PC),D1
  16663.     CMP.L    D1,D0
  16664.     BEQ    LargerRangeError
  16665.     SUB.L    D0,D1
  16666.     BNE    shorano
  16667.     MOVEQ    #1,D1
  16668. shorano    MOVE.L    D1,SamDisplay
  16669.     MOVE.L    D0,SamOffSet
  16670.     MOVEQ    #-1,D0
  16671.     MOVE.L    D0,MarkStartOfs
  16672.     CLR    MarkStart
  16673.     BSR    DisplaySample
  16674.     JMP    WaitForButtonUp
  16675.  
  16676. ZoomOut    MOVE.L    SamDisplay(PC),D0
  16677.     MOVE.L    SamLength(PC),D1
  16678.     MOVE.L    SamOffSet(PC),D2
  16679.     MOVE.L    D0,D3
  16680.     LSL.L    #1,D3
  16681.     CMP.L    D1,D3
  16682.     BHI    ShowAll
  16683.     LSR.L    #1,D0
  16684.     CMP.L    D2,D0
  16685.     BLO    zoomou2
  16686.     MOVEQ    #0,D0
  16687. zoomou2    SUB.L    D0,D2
  16688.     MOVE.L    D2,D0
  16689.     ADD.L    D3,D0
  16690.     CMP.L    D1,D0
  16691.     BLS    zoomou3
  16692.     SUB.L    D3,D1
  16693.     MOVE.L    D1,D2
  16694. zoomou3    MOVE.L    D2,SamOffSet
  16695.     MOVE.L    D3,SamDisplay
  16696.     BSR    OffsetToMark
  16697.     MOVE.L    MarkStartOfs(PC),D0
  16698.     CMP.L    MarkEndOfs(PC),D0
  16699.     BNE    zoomouo
  16700.     MOVEQ    #-1,D0
  16701.     MOVE.L    D0,MarkStartOfs
  16702. zoomouo    BSR    DisplaySample
  16703.     JMP    WaitForButtonUp
  16704.  
  16705. ShowAll    CLR.L    SamOffSet
  16706.     MOVE.L    SamLength(PC),SamDisplay
  16707.     BSR    OffsetToMark
  16708.     MOVE.L    MarkStartOfs(PC),D0
  16709.     CMP.L    MarkEndOfs(PC),D0
  16710.     BNE    shoallo
  16711.     MOVEQ    #-1,D0
  16712.     MOVE.L    D0,MarkStartOfs
  16713.     CLR    MarkStart
  16714. shoallo    BSR    DisplaySample
  16715.     JMP    WaitForButtonUp
  16716.  
  16717. RangeAll
  16718.     BSR    InvertRange
  16719.     MOVE    #3,MarkStart
  16720.     MOVE    #316,MarkEnd
  16721.     BSR    MarkToOffset
  16722. ranall2    BSR    InvertRange
  16723.     JMP    WaitForButtonUp
  16724.  
  16725.  
  16726. CurToStart
  16727.     BSR    InvertRange
  16728.     MOVEQ    #3,D0
  16729.     MOVE    D0,MarkStart
  16730.     MOVE    D0,MarkEnd
  16731.     MOVE.L    SamOffSet(PC),D0
  16732.     MOVE.L    D0,MarkStartOfs
  16733.     MOVE.L    D0,MarkEndOfs
  16734.     CLR.L    SamplePos
  16735.     BSR    ShowPos
  16736.     BRA    ranall2
  16737.  
  16738. CurToMid
  16739.     BSR    InvertRange
  16740.     MOVE    #156,D0
  16741.     MOVE    D0,MarkStart
  16742.     MOVE    D0,MarkEnd
  16743.     MOVE.L    SamOffSet(PC),D0
  16744.     LSR.L    #1,D0
  16745.     ADD.L    SamDisplay(PC),D0
  16746.     MOVE.L    D0,MarkStartOfs
  16747.     MOVE.L    D0,MarkEndOfs
  16748.     LSR.L    #1,D0
  16749.     MOVE.L    D0,SamplePos
  16750.     BSR    ShowPos
  16751.     BRA    ranall2
  16752.  
  16753. CurToEnd
  16754.     BSR    InvertRange
  16755.     MOVE    #316,D0
  16756.     MOVE    D0,MarkStart
  16757.     MOVE    D0,MarkEnd
  16758.     MOVE.L    SamOffSet(PC),D0
  16759.     ADD.L    SamDisplay(PC),D0
  16760.     MOVE.L    D0,MarkStartOfs
  16761.     MOVE.L    D0,MarkEndOfs
  16762.     MOVE.L    D0,SamplePos
  16763.     BSR    ShowPos
  16764.     BRA    ranall2
  16765.  
  16766. SwapBuffer
  16767.     MOVE    InsNum(PC),D1
  16768.     BEQ    NotSampleNull
  16769.     LSL    #2,D1
  16770.     LEA    SamplePtrs,A0
  16771.     LEA    (A0,D1.W),A0
  16772.  
  16773.     MOVE.L    CopyBufPtr(PC),D0
  16774.     MOVE.L    (A0),CopyBufPtr
  16775.     MOVE.L    D0,(A0)
  16776.     MOVE.L    D0,A1
  16777.     CLR    (A1)
  16778.  
  16779.     MOVE.L    CopyBufSize(PC),D0
  16780.     MOVE.L    124(A0),CopyBufSize
  16781.     MOVE.L    D0,124(A0)
  16782.  
  16783.     MOVE.L    SongDataPtr(PC),A0
  16784.     MOVE    InsNum(PC),D1
  16785.     MULU    #30,D1
  16786.     LEA    12(A0,D1.W),A0
  16787.     LSR.L    #1,D0
  16788.     MOVE    D0,(A0)
  16789.     MOVE.L    RepBuf(PC),D0
  16790.     MOVE.L    4(A0),RepBuf
  16791.     MOVE.L    D0,4(A0)
  16792.  
  16793.     MOVE    RepBuf2(PC),D0
  16794.     MOVE    2(A0),RepBuf2
  16795.     TST.B    D0
  16796.     BNE.S    swabuf2
  16797.     MOVE.B    #$40,D0
  16798. swabuf2    MOVE    D0,2(A0)
  16799.     JSR    TurnOffVoices
  16800.     BSR    ValidateLoops
  16801.     BSR    ShowSampleInfo
  16802.     BSR    UpdateRepeats
  16803.     BSR    RedrawSample
  16804.     JMP    WaitForButtonUp
  16805.  
  16806. RepBuf    dc.l    1
  16807. RepBuf2    dc.w    $0040
  16808.  
  16809. ;----
  16810.  
  16811. NoRangeError
  16812.     LEA    NoRangeText(PC),A0
  16813. nres2    BSR    ShowStatusText
  16814.     JMP    SetErrorPtrCol
  16815.  
  16816. LargerRangeError
  16817.     LEA    LargerRangeText(PC),A0
  16818.     BRA.S    nres2
  16819.  
  16820. SetCursorError
  16821.     LEA    SetCursorText(PC),A0
  16822.     BRA.S    nres2
  16823.  
  16824. BufIsEmptyError
  16825.     LEA    BufIsEmptyText(PC),A0
  16826.     BRA.S    nres2
  16827.  
  16828. EmptySampleError
  16829.     LEA    EmptySampleText(PC),A0
  16830.     BRA.S    nres2
  16831.  
  16832. NoRangeText    dc.b "no range selected",0
  16833. LargerRangeText    dc.b "set larger range",0
  16834. SetCursorText    dc.b "set cursor pos",0
  16835. BufIsEmptyText    dc.b "buffer is empty",0
  16836. EmptySampleText    dc.b "sample is empty",0
  16837.  
  16838. ;----
  16839.  
  16840. DispBox
  16841.     RTS
  16842.  
  16843. LoopToggle
  16844.     JSR    WaitForButtonUp
  16845.     MOVE    InsNum(PC),D1
  16846.     BEQ    NotSampleNull
  16847.     MOVE.L    SongDataPtr(PC),A0
  16848.     MULU    #30,D1
  16849.     LEA    12(A0,D1.W),A0
  16850.     TST    LoopOnOffFlag
  16851.     BEQ.S    loopton
  16852.     MOVE.L    4(A0),SavSamInf
  16853.     MOVEQ    #1,D0
  16854.     MOVE.L    D0,4(A0)
  16855.     BSR    ValidateLoops
  16856.     JSR    TurnOffVoices
  16857. looptlo    BSR    ShowSampleInfo
  16858.     BSR    UpdateRepeats
  16859.     BRA    DisplaySample
  16860. loopton    MOVE.L    SavSamInf(PC),D0
  16861.     BNE.S    loopto2
  16862.     MOVE    (A0),D0
  16863. loopto2    MOVE.L    D0,4(A0)
  16864.     BSR    ValidateLoops
  16865.     BRA    looptlo
  16866.  
  16867. ShowLoopToggle
  16868.     LEA    ToggleOFFText(PC),A0
  16869.     TST    LoopOnOffFlag
  16870.     BEQ.S    sltskip
  16871.     LEA    ToggleONText(PC),A0
  16872. sltskip    MOVEQ    #3,D0
  16873.     MOVE    #9076,D1
  16874.     BRA    ShowText3
  16875.  
  16876. LoopOnOffFlag    dc.w 0
  16877. SavSamInf    dc.l 0
  16878.  
  16879. SetSamNote
  16880.     BSR    ShowResamNote
  16881.     MOVE    #9516,TextOffset
  16882.     MOVE    #3,TextLength
  16883.     MOVE.L    #SpcNoteText,ShowTextPtr
  16884.     BSR    ShowText
  16885.     MOVE    #1,SamNoteType
  16886.     MOVE.L    #SampleNote,SplitAddress
  16887.     JMP    WaitForButtonUp
  16888.  
  16889. SetResamNote
  16890.     BSR    ShowSamNote
  16891.     MOVE    #9956,TextOffset
  16892.     MOVE    #3,TextLength
  16893.     MOVE.L    #SpcNoteText,ShowTextPtr
  16894.     BSR    ShowText
  16895.     MOVE    #2,SamNoteType
  16896.     MOVE.L    #ResampleNote,SplitAddress
  16897.     JMP    WaitForButtonUp
  16898.  
  16899. ResampleText    dc.b "Resample?",0
  16900. ResamplingText    dc.b "Resampling...",0
  16901.  
  16902. Resample
  16903.     LEA    ResampleText(PC),A0
  16904.     JSR    AreYouSure
  16905.     BNE    Return2
  16906.     JSR    StorePtrCol
  16907.     JSR    SetWaitPtrCol
  16908.     LEA    ResamplingText(PC),A0
  16909.     BSR    ShowStatusText
  16910.     LEA    SamplePtrs,A0
  16911.     MOVE    InsNum(PC),D1
  16912.     BEQ    NotSampleNull
  16913.     LSL    #2,D1
  16914.     LEA    (A0,D1.W),A0
  16915.     MOVE.L    (A0),D0
  16916.     BEQ    ERC2
  16917.     MOVE.L    D0,A2
  16918.     MOVE.L    124(A0),D6
  16919.     CMP.L    #2,D6
  16920.     BLS    ERC2
  16921.  
  16922.     MOVE.L    SongDataPtr(PC),A0
  16923.     MOVE    InsNum(PC),D1
  16924.     MULU    #30,D1
  16925.     MOVEQ    #0,D0
  16926.     MOVE.B    12+2(A0,D1.W),D0 ; finetune
  16927.     MULU    #37*2,D0
  16928.     LEA    PeriodTable(PC),A0
  16929.     ADD.L    D0,A0
  16930.     MOVEQ    #0,D1
  16931.     MOVE    ResampleNote(PC),D1
  16932.     LSL    #1,D1
  16933.     MOVE    (A0,D1.W),D1
  16934.     BEQ    ERC2
  16935.  
  16936.     LEA    PeriodTable,A0
  16937.     MOVEQ    #0,D5
  16938.     MOVE    TuneNote,D5
  16939.     LSL    #1,D5
  16940.     MOVE    (A0,D5.W),D5
  16941.     BEQ    ERC2
  16942.  
  16943. ; D1=resamperiod, D5=tuneperiod
  16944.  
  16945.     MOVE.L    D5,D0 ; tune
  16946.     LSL.L    #8,D0
  16947.     LSL.L    #4,D0 ; * 4096
  16948.     DIVU    D1,D0 ; / resample
  16949.     MOVEQ    #0,D4
  16950.     MOVE    D0,D4
  16951.     LSL.L    #4,D4 ; hi-word=add value, lo-word=fraction
  16952.  
  16953.     MOVE    D6,D7
  16954.     LSR    #1,D7
  16955.     MULU    D1,D7
  16956.     DIVU    D5,D7
  16957.     AND.L    #$FFFF,D7
  16958.     CMP    #2,D7
  16959.     BLO    ERC2
  16960.     CMP    #$7FFF,D7
  16961.     BLO    resamlo
  16962.     MOVE    #$7FFF,D7
  16963. resamlo    ADD.L    D7,D7
  16964.     MOVE.L    D7,D0
  16965.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  16966.     MOVE.L    4.W,A6
  16967.     JSR    LVOAllocMem(A6)
  16968.     TST.L    D0
  16969.     BEQ    SamMemError
  16970.     MOVE.L    D0,A1
  16971.     MOVE.L    D0,A3
  16972.     JSR    TurnOffVoices
  16973.     MOVE.L    A2,A0
  16974. ; D4=resample value, D6=old length, D7=new length
  16975. ; A0/A2=old sample, A1/A3=new sample
  16976.  
  16977.     MOVE    #32767,D1
  16978.     MOVEQ    #0,D3
  16979.     MOVEQ    #0,D5
  16980. resampleloop
  16981.     MOVE.B    1(A0),D0
  16982.     EXT    D0
  16983.     MULS    D1,D0
  16984.     MOVE.B    (A0),D2
  16985.     EXT    D2
  16986.     MULS    D3,D2
  16987.     ADD.L    D2,D0
  16988.     ASR.L    #8,D0
  16989.     ASR.L    #7,D0
  16990.     MOVE.B    D0,(A1)+
  16991.  
  16992.     ADD.L    D4,D5
  16993.     SWAP    D5
  16994.     MOVE.L    A2,A0
  16995.     MOVEQ    #0,D0
  16996.     MOVE    D5,D0
  16997.     ADD.L    D0,A0
  16998.     SWAP    D5
  16999.     MOVE    D5,D1
  17000.     LSR    #1,D1
  17001.     MOVE    #32767,D3
  17002.     SUB    D1,D3
  17003.  
  17004.     MOVE.L    A1,A4
  17005.     SUB.L    A3,A4
  17006.     CMP.L    D7,A4
  17007.     BHS.S    resamskip
  17008.     MOVE.L    A0,A4
  17009.     SUB.L    A2,A4
  17010.     CMP.L    D6,A4
  17011.     BLO.S    resampleloop
  17012.  
  17013. resamskip
  17014.     MOVE.L    A2,A1
  17015.     MOVE.L    D6,D0
  17016.     MOVE.L    4.W,A6
  17017.     JSR    LVOFreeMem(A6)
  17018.     MOVE    InsNum(PC),D1
  17019.     LSL    #2,D1
  17020.     LEA    SamplePtrs,A0
  17021.     LEA    (A0,D1.W),A0
  17022.     MOVE.L    A3,(A0)
  17023.     MOVE.L    D7,124(A0)
  17024.  
  17025.     MOVE.L    SongDataPtr(PC),A0
  17026.     MOVE    InsNum(PC),D1
  17027.     MULU    #30,D1
  17028.     LEA    12(A0,D1.W),A0
  17029.     LSR.L    #1,D7
  17030.     MOVE    D7,(A0)
  17031.     CLR.B    2(A0)
  17032.     CLR    4(A0)
  17033.     MOVE    #1,6(A0)
  17034.     JSR    RestorePtrCol
  17035.     BSR    ClearSamStarts
  17036.     BSR    ShowSampleInfo
  17037.     BSR    ShowAllRight
  17038.     BRA    RedrawSample
  17039.  
  17040. ERC2    JMP    ErrorRestoreCol
  17041.  
  17042. SamCut    CLR.B    RawKeyCode
  17043.     MOVE.L    MarkStartOfs(PC),D0
  17044.     BMI    NoRangeError
  17045.     CMP.L    MarkEndOfs(PC),D0
  17046.     BEQ    LargerRangeError
  17047.     TST.B    CutToBufFlag
  17048.     BEQ.S    samcut2
  17049.     BSR    SamCopy
  17050. samcut2    BSR    TurnOffVoices
  17051.     LEA    SamplePtrs(PC),A0
  17052.     MOVE    InsNum(PC),D1
  17053.     BEQ    NotSampleNull
  17054.     LSL    #2,D1
  17055.     LEA    (A0,D1.W),A0
  17056.     MOVE.L    (A0),D0
  17057.     BEQ    EmptySampleError
  17058.     MOVE.L    124(A0),D2
  17059.     CMP.L    #2,D2
  17060.     BLO    EmptySampleError
  17061.  
  17062.     MOVE.L    D0,A1
  17063.     MOVE.L    D0,A2        ; sample start
  17064.     MOVE.L    D0,A3
  17065.     MOVE.L    D0,A4
  17066.     MOVE.L    D0,A5
  17067.     ADD.L    MarkStartOfs(PC),A3    ; mark start
  17068.     MOVE.L    MarkEndOfs(PC),D0
  17069.     SUB.L    MarkStartOfs(PC),D0
  17070.     CMP.L    D2,D0
  17071.     BHS    Destroy
  17072.     MOVE.L    MarkEndOfs(PC),D0
  17073.     CMP.L    D2,D0
  17074.     BLO.S    samsome
  17075.     MOVE.L    D2,D0
  17076.     SUBQ.L    #1,D0
  17077. samsome    ADD.L    D0,A4    ; mark end
  17078.     ADD.L    D2,A5        ; sample end
  17079.  
  17080.     MOVE.L    A3,D0
  17081.     SUB.L    A2,D0
  17082.     ADD.L    A5,D0
  17083.     SUB.L    A4,D0
  17084.     BNE    sacoklen
  17085.     MOVEQ    #0,D3
  17086.     MOVEQ    #0,D4
  17087.     BRA    sacfree
  17088.  
  17089. sacoklen
  17090.     MOVE.L    D0,D3
  17091.     MOVEQ    #MEMF_CHIP,D1
  17092.     MOVE.L    4.W,A6
  17093.     JSR    LVOAllocMem(A6)
  17094.     MOVE.L    D0,D4
  17095.     BEQ    OutOfMemErr ; No memory
  17096.  
  17097.     MOVE.L    D0,A0
  17098.     MOVE.L    A2,A1
  17099.     MOVE.L    A3,D0
  17100.     SUB.L    A2,D0
  17101.     BRA.S    sacskp1
  17102. saclop1    MOVE.B    (A2)+,(A0)+
  17103. sacskp1    DBF    D0,saclop1
  17104.  
  17105.     MOVE.L    A5,D0
  17106.     SUB.L    A4,D0
  17107.     BRA.S    sacskp2
  17108. smclop2    MOVE.B    (A4)+,(A0)+
  17109. sacskp2    DBF    D0,smclop2
  17110.  
  17111. sacfree    MOVE.L    D2,D0
  17112.     MOVE.L    4.W,A6
  17113.     JSR    LVOFreeMem(A6)
  17114.  
  17115.     MOVE    InsNum(PC),D1
  17116.     LSL    #2,D1
  17117.     LEA    SamplePtrs(PC),A0
  17118.     LEA    (A0,D1.W),A0
  17119.     MOVE.L    D4,(A0)
  17120.     MOVE.L    D3,124(A0)
  17121.  
  17122.     MOVE.L    D4,SamStart
  17123.     MOVE.L    D3,SamLength
  17124.     MOVE.L    SamOffSet(PC),D4
  17125.     ADD.L    SamDisplay(PC),D4
  17126.     CMP.L    D3,D4
  17127.     BLO    samcuto        ; display ok
  17128.     MOVE.L    SamDisplay(PC),D4
  17129.     CMP.L    D3,D4
  17130.     BLO    samnils        ; if display < length, move offset
  17131. samsall    CLR.L    SamOffSet    ; else show all
  17132.     MOVE.L    D3,SamDisplay
  17133.     BRA    samcuto
  17134. samnils    MOVE.L    D3,D4
  17135.     SUB.L    SamDisplay(PC),D4
  17136.     BMI.S    samsall        ; if offset < 0, show all
  17137.     MOVE.L    D4,SamOffSet
  17138. samcuto    MOVE.L    SongDataPtr(PC),A0
  17139.     MOVE    InsNum(PC),D1
  17140.     MULU    #30,D1
  17141.     LEA    12(A0,D1.W),A0
  17142.  
  17143.     LSR.L    #1,D3
  17144.     MOVE    D3,(A0)
  17145.     MOVE    4(A0),D0
  17146.     CMP    D3,D0
  17147.     BLS.S    samcuxx
  17148.     MOVEQ    #1,D0
  17149.     MOVE.L    D0,4(A0)
  17150.     BRA.S    samcuex
  17151. samcuxx    ADD    6(A0),D0
  17152.     CMP    D3,D0
  17153.     BLS.S    samcuex
  17154.     SUB    4(A0),D3
  17155.     MOVE    D3,6(A0)
  17156.  
  17157. samcuex    MOVE.L    MarkStartOfs(PC),MarkEndOfs
  17158.     BSR    ClearSamStarts
  17159.     BSR    ValidateLoops
  17160.     BSR    ShowSampleInfo
  17161.     BRA    DisplaySample
  17162.  
  17163.  
  17164. SamCopy    CLR.B    RawKeyCode
  17165.     MOVE.L    MarkStartOfs(PC),D0
  17166.     BMI    NoRangeError
  17167.     CMP.L    MarkEndOfs(PC),D0
  17168.     BEQ    LargerRangeError
  17169.     LEA    SamplePtrs(PC),A0
  17170.     MOVE    InsNum(PC),D1
  17171.     BEQ    NotSampleNull
  17172.     LSL    #2,D1
  17173.     LEA    (A0,D1.W),A0
  17174.     MOVE.L    (A0),D0
  17175.     BEQ    EmptySampleError
  17176.     MOVE.L    124(A0),D2
  17177.     BEQ    EmptySampleError
  17178.     MOVE.L    D0,A3
  17179.     MOVE.L    D0,A4
  17180.     ADD.L    MarkStartOfs(PC),A3    ; mark start
  17181.     MOVE.L    MarkEndOfs(PC),D0    ; mark end
  17182.     CMP.L    D2,D0
  17183.     BLO.S    csamsom
  17184.     MOVE.L    D2,D0
  17185.     SUBQ.L    #1,D0
  17186. csamsom    ADD.L    D0,A4
  17187.     BSR.S    FreeCopyBuf
  17188.     MOVE.L    A4,D0
  17189.     SUB.L    A3,D0
  17190.     ADDQ.L    #1,D0
  17191.     MOVE.L    D0,CopyBufSize
  17192.     MOVEQ    #MEMF_CHIP,D1
  17193.     MOVE.L    4.W,A6
  17194.     JSR    LVOAllocMem(A6)
  17195.     MOVE.L    D0,CopyBufPtr
  17196.     BEQ    OutOfMemErr ; No memory
  17197.     MOVE.L    D0,A5
  17198. csamlop    MOVE.B    (A3)+,(A5)+
  17199.     CMP.L    A4,A3
  17200.     BLS.S    csamlop
  17201.     BSR    InvertRange
  17202.     BSR    InvertRange
  17203.     JMP    WaitForButtonUp
  17204.  
  17205. FreeCopyBuf
  17206.     MOVE.L    CopyBufPtr(PC),D0
  17207.     BEQ    Return2
  17208.     MOVE.L    D0,A1
  17209.     MOVE.L    CopyBufSize(PC),D0
  17210.     MOVE.L    4.W,A6
  17211.     JSR    LVOFreeMem(A6)
  17212.     CLR.L    CopyBufPtr
  17213.     RTS
  17214.  
  17215. CopyBufPtr    dc.l    0
  17216. CopyBufSize    dc.l    0
  17217.  
  17218. SamPaste
  17219.     CLR.B    RawKeyCode
  17220.     MOVE.L    MarkStartOfs(PC),D0
  17221.     BMI    SetCursorError
  17222.     LEA    SamplePtrs(PC),A0
  17223.     MOVE    InsNum(PC),D1
  17224.     BEQ    NotSampleNull
  17225.     LSL    #2,D1
  17226.     LEA    (A0,D1.W),A0
  17227.     MOVEQ    #0,D2
  17228.     MOVE.L    (A0),D0
  17229.     BEQ.S    sapanul
  17230.     MOVE.L    124(A0),D2
  17231. sapanul    MOVE.L    D0,A2
  17232.     MOVE.L    CopyBufPtr(PC),D3
  17233.     BEQ    BufIsEmptyError
  17234.     MOVE.L    D3,A3
  17235.     MOVE.L    CopyBufSize(PC),D3
  17236.     BEQ    BufIsEmptyError
  17237.  
  17238.     MOVE.L    D3,D4 ; copysize
  17239.     ADD.L    D2,D4 ; + origsize
  17240.     CMP.L    #$FFFE,D4
  17241.     BLO.S    sapaok
  17242.     MOVE.L    #$FFFE,D4
  17243. sapaok    MOVE.L    D4,D0
  17244.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  17245.     MOVE.L    4.W,A6
  17246.     JSR    LVOAllocMem(A6)
  17247.     TST.L    D0
  17248.     BEQ    OutOfMemErr
  17249.     MOVE.L    D0,A4
  17250.     MOVEQ    #0,D0
  17251.     TST.L    D2
  17252.     BEQ.S    sapask1
  17253.     MOVE.L    MarkStartOfs(PC),D0
  17254. sapask1    MOVE.L    D0,MarkStartOfs
  17255.     MOVE.L    A2,A1
  17256.     MOVE.L    D2,D1
  17257.     MOVE.L    A4,A5
  17258.     MOVE.L    A4,A0
  17259.     ADD.L    D4,A0
  17260. ; D0    = paste position
  17261. ; A0    = end of new sample
  17262. ; A1/D1 = copy of A2/D2
  17263. ; A2/D2 = original sample
  17264. ; A3/D3 = copy buffer
  17265. ; A4/D4 = new sample
  17266. ; A5    = copy of A4
  17267.     BRA.S    sapask2
  17268. sapalp1    MOVE.B    (A2)+,(A4)+ ; copy first part
  17269.     CMP.L    A0,A4
  17270.     BHS.S    sapaski
  17271.     SUBQ.L    #1,D2
  17272. sapask2    DBF    D0,sapalp1
  17273.     BRA.S    sapask3
  17274. sapalp2    MOVE.B    (A3)+,(A4)+ ; copy from buffer
  17275.     CMP.L    A0,A4
  17276.     BHS.S    sapaski
  17277. sapask3    DBF    D3,sapalp2
  17278.     TST.L    D2
  17279.     BEQ.S    sapaski
  17280.     BMI.S    sapaski
  17281. sapalp3    MOVE.B    (A2)+,(A4)+ ; copy last part
  17282.     CMP.L    A0,A4
  17283.     BHS.S    sapaski
  17284.     SUBQ.L    #1,D2
  17285.     BNE.S    sapalp3
  17286.  
  17287. sapaski    MOVE.L    D1,D0
  17288.     MOVE.L    4.W,A6
  17289.     JSR    LVOFreeMem(A6)
  17290.  
  17291.     MOVE    InsNum(PC),D1
  17292.     LSL    #2,D1
  17293.     LEA    SamplePtrs(PC),A0
  17294.     LEA    (A0,D1.W),A0
  17295.     MOVE.L    A5,(A0)
  17296.     MOVE.L    D4,124(A0)
  17297.  
  17298.     MOVE.L    SongDataPtr(PC),A0
  17299.     MOVE    InsNum(PC),D1
  17300.     MULU    #30,D1
  17301.     LEA    12(A0,D1.W),A0
  17302.     LSR.L    #1,D4
  17303.     MOVE    D4,(A0)
  17304.  
  17305.     MOVE.L    MarkStartOfs(PC),MarkEndOfs
  17306.     BSR    OffsetToMark
  17307.     BSR    ClearSamStarts
  17308.     BSR    ShowSampleInfo
  17309.     BRA    RedrawSample
  17310.  
  17311. RampVolume
  17312.     MOVE.L    TextBplPtr(PC),A0
  17313.     LEA    6209(A0),A0
  17314.     MOVEQ    #32,D3
  17315. ravlap2    MOVEQ    #16,D2
  17316. ravlap1    CLR.B    (A0)+
  17317.     DBF    D2,ravlap1
  17318.     LEA    23(A0),A0
  17319.     DBF    D3,ravlap2
  17320.     LEA    BitPlaneData+VolBoxPos,A0
  17321.     LEA    VolBoxData,A1
  17322.     MOVEQ    #1,D4
  17323. ravlop3    MOVEQ    #32,D3
  17324. ravlop2    MOVEQ    #16,D2
  17325. ravlop1    MOVE.B    (A1)+,(A0)+
  17326.     DBF    D2,ravlop1
  17327.     ADDQ.L    #1,A1
  17328.     LEA    23(A0),A0
  17329.     DBF    D3,ravlop2
  17330.     LEA    8920(A0),A0
  17331.     DBF    D4,ravlop3
  17332.     BSR    ShowVolSliders
  17333.     JSR    WaitForButtonUp
  17334. ravloop    BTST    #2,$DFF016
  17335.     BEQ.S    ExitVolBox
  17336.     JSR    DoKeyBuffer
  17337.     MOVE.B    RawKeyCode(PC),D2
  17338.     CMP.B    #68,D2
  17339.     BEQ.S    ExitVolBox
  17340.     BTST    #6,$BFE001
  17341.     BNE.S    ravloop
  17342.     MOVEM.W    MouseX,D0-D1
  17343.     CMP    #72,D0
  17344.     BLO.S    ravloop
  17345.     CMP    #72+136,D0
  17346.     BHS.S    ravloop
  17347.     CMP    #155,D1
  17348.     BLO.S    ravloop
  17349.     CMP    #166,D1
  17350.     BLO.S    Vol1Slider
  17351.     CMP    #177,D1
  17352.     BLO    Vol2Slider
  17353.     CMP    #188,D1
  17354.     BLO    VolGadgs
  17355.     BRA.S    ravloop
  17356.  
  17357. ExitVolBox
  17358.     LEA    BitPlaneData+VolBoxPos,A0
  17359.     MOVEQ    #1,D2
  17360. revlap3    MOVEQ    #32,D1
  17361. revlap2    MOVEQ    #16,D0
  17362. revlap1    CLR.B    (A0)+
  17363.     DBF    D0,revlap1
  17364.     LEA    23(A0),A0
  17365.     DBF    D1,revlap2
  17366.     LEA    8920(A0),A0
  17367.     DBF    D2,revlap3
  17368.     BRA    DisplaySample
  17369.  
  17370. Vol1Slider
  17371.     CMP    #167,D0
  17372.     BHI.S    v1skip
  17373.     LEA    Vol1(PC),A4
  17374.     MOVEQ    #0,D7
  17375. v1loop1    BTST    #6,$BFE001
  17376.     BNE    ravloop
  17377.     MOVE    MouseX(PC),D0
  17378.     CMP    D7,D0
  17379.     BEQ.S    v1loop1
  17380.     MOVE    D0,D7
  17381.     SUB    #107,D0
  17382.     BPL.S    v1skp2
  17383.     MOVEQ    #0,D0
  17384. v1skp2    CMP    #60,D0
  17385.     BLS.S    v1skp3
  17386.     MOVEQ    #60,D0
  17387. v1skp3    MULU    #200,D0
  17388.     DIVU    #60,D0
  17389.     MOVE    D0,(A4)
  17390. shvosl    BSR    ShowVolSliders
  17391.     BRA.S    v1loop1
  17392.  
  17393. v1skip    MOVE    #180,LineCurX
  17394.     MOVE    #164,LineCurY
  17395.     MOVE    #6342,TextOffset
  17396.     BSR    GetDec3Dig
  17397.     TST    AbortDecFlag
  17398.     BNE    shvosl
  17399.     CMP    #200,D0
  17400.     BLS.S    v1sk2
  17401.     MOVE    #200,D0
  17402. v1sk2    MOVE    D0,Vol1
  17403.     BRA.S    shvosl
  17404.  
  17405. Vol2Slider
  17406.     CMP    #167,D0
  17407.     BHI.S    v2skip
  17408.     LEA    Vol2(PC),A4
  17409.     MOVEQ    #0,D7
  17410.     BRA    v1loop1
  17411. v2skip    MOVE    #180,LineCurX
  17412.     MOVE    #175,LineCurY
  17413.     MOVE    #6782,TextOffset
  17414.     BSR    GetDec3Dig
  17415.     TST    AbortDecFlag
  17416.     BNE    shvosl
  17417.     CMP    #200,D0
  17418.     BLS.S    v2sk2
  17419.     MOVE    #200,D0
  17420. v2sk2    MOVE    D0,Vol2
  17421.     BRA    shvosl
  17422.  
  17423.  
  17424. VolGadgs
  17425.     CMP    #100,D0
  17426.     BLO    DoRampVol
  17427.     CMP    #144,D0
  17428.     BLO    Normalize
  17429.     CMP    #154,D0
  17430.     BLO.S    SetRampDown
  17431.     CMP    #164,D0
  17432.     BLO.S    SetRampUp
  17433.     CMP    #174,D0
  17434.     BLO.S    SetRampUnity
  17435.     BRA    ExitVolBox
  17436.  
  17437. SetRampDown
  17438.     MOVE    #100,Vol1
  17439.     CLR    Vol2
  17440.     BRA.S    sru2
  17441. SetRampUp
  17442.     CLR    Vol1
  17443.     MOVE    #100,Vol2
  17444.     BRA.S    sru2
  17445. SetRampUnity
  17446.     MOVE    #100,Vol1
  17447.     MOVE    #100,Vol2
  17448. sru2    BSR.S    ShowVolSliders
  17449.     JSR    WaitForButtonUp
  17450.     BRA    ravloop
  17451.  
  17452. ShowVolSliders
  17453.     MOVE.L    TextBplPtr(PC),A0
  17454.     LEA    6209(A0),A0
  17455.     MOVEQ    #21,D3
  17456. ravlip2    MOVEQ    #12,D2
  17457. ravlip1    CLR.B    (A0)+
  17458.     DBF    D2,ravlip1
  17459.     LEA    27(A0),A0
  17460.     DBF    D3,ravlip2
  17461.     MOVEQ    #0,D4
  17462.     MOVE    Vol1(PC),D4
  17463.     MOVEQ    #20,D5
  17464.     BSR    OneSlider
  17465.     MOVEQ    #0,D4
  17466.     MOVE    Vol2(PC),D4
  17467.     MOVEQ    #31,D5
  17468.     BSR    OneSlider
  17469.     MOVE    Vol1(PC),WordNumber
  17470.     MOVE    #6342,TextOffset
  17471.     BSR    Print3DecDigits
  17472.     MOVE    Vol2(PC),WordNumber
  17473.     MOVE    #6782,TextOffset
  17474.     BRA    Print3DecDigits
  17475.  
  17476. OneSlider
  17477.     MOVE    D4,D6
  17478.     ADD    D4,D4
  17479.     ADD    D6,D4
  17480.     DIVU    #10,D4
  17481.     ADD    #105,D4
  17482.     MOVEQ    #2,D6
  17483. oneslop    MOVE    D4,D0
  17484.     MOVE    D4,D2
  17485.     ADDQ    #5,D2
  17486.     MOVE    D5,D1
  17487.     MOVE    D5,D3
  17488.     BSR    DrawLine
  17489.     ADDQ    #1,D5
  17490.     DBF    D6,oneslop
  17491.     RTS
  17492.  
  17493. DoRampVol
  17494.     CLR.B    RawKeyCode
  17495.     LEA    SamplePtrs(PC),A0
  17496.     MOVE    InsNum(PC),D1
  17497.     BEQ    nozerr1
  17498.     LSL    #2,D1
  17499.     LEA    (A0,D1.W),A0
  17500.     MOVEQ    #0,D2
  17501.     MOVE.L    (A0),D0
  17502.     BEQ    nozerr2
  17503.     MOVE.L    D0,A2
  17504.     MOVE.L    124(A0),D2
  17505.     BEQ    nozerr2
  17506.     MOVE.L    MarkStartOfs(PC),D0
  17507.     BMI    drvskip
  17508.     MOVE.L    MarkEndOfs(PC),D1
  17509.     SUB.L    D0,D1
  17510.     BEQ.S    drvskip
  17511.     ADD.L    D0,A2
  17512.     MOVE.L    D1,D2
  17513.     ADDQ.L    #1,D2
  17514. drvskip    JSR    StorePtrCol
  17515.     JSR    SetWaitPtrCol
  17516.     MOVE.L    D2,D5
  17517.     MOVEQ    #0,D3
  17518. drvloop    MOVE    D3,D1
  17519.     MULU    Vol2(PC),D1
  17520.     DIVU    D2,D1
  17521.     MOVE    D2,D4
  17522.     SUB    D3,D4
  17523.     MULU    Vol1(PC),D4
  17524.     DIVU    D2,D4
  17525.     ADD    D4,D1
  17526.     ADDQ    #1,D3
  17527.     MOVE.B    (A2),D0
  17528.     EXT    D0
  17529.     MULS    D1,D0
  17530.     DIVS    #100,D0
  17531.     CMP    #127,D0
  17532.     BLT.S    drvskp2
  17533.     MOVEQ    #127,D0
  17534. drvskp2    CMP    #-128,D0
  17535.     BGT.S    drvskp3
  17536.     MOVEQ    #-128,D0
  17537. drvskp3    MOVE.B    D0,(A2)+
  17538.     SUBQ.L    #1,D5
  17539.     BNE    drvloop
  17540.     JSR    RestorePtrCol
  17541.     BRA    ExitVolBox
  17542.  
  17543. nozerr1    BSR    NotSampleNull
  17544.     BRA    ravloop
  17545. nozerr2    BSR    EmptySampleError
  17546.     BRA    ravloop
  17547.  
  17548. Normalize
  17549.     CLR.B    RawKeyCode
  17550.     LEA    SamplePtrs(PC),A0
  17551.     MOVE    InsNum(PC),D1
  17552.     BEQ    nozerr1
  17553.     LSL    #2,D1
  17554.     LEA    (A0,D1.W),A0
  17555.     MOVEQ    #0,D2
  17556.     MOVE.L    (A0),D0
  17557.     BEQ    nozerr2
  17558.     MOVE.L    D0,A2
  17559.     MOVE.L    124(A0),D2
  17560.     BEQ    nozerr2
  17561.     MOVE.L    MarkStartOfs(PC),D0
  17562.     BMI    nozskip
  17563.     MOVE.L    MarkEndOfs(PC),D1
  17564.     SUB.L    D0,D1
  17565.     BEQ.S    nozskip
  17566.     ADD.L    D0,A2
  17567.     MOVE.L    D1,D2
  17568.     ADDQ.L    #1,D2
  17569. nozskip    JSR    StorePtrCol
  17570.     JSR    SetWaitPtrCol
  17571.     MOVEQ    #0,D0
  17572. nozloop    MOVE.B    (A2)+,D1
  17573.     EXT    D1
  17574.     BPL.S    nozskp2
  17575.     NEG    D1
  17576. nozskp2    CMP    D0,D1
  17577.     BLO.S    nozskp3
  17578.     MOVE    D1,D0
  17579. nozskp3    SUBQ.L    #1,D2
  17580.     BNE    nozloop
  17581.     JSR    RestorePtrCol
  17582.     TST    D0
  17583.     BEQ    SetRampUnity
  17584.     CMP    #127,D0
  17585.     BHI    SetRampUnity
  17586.     CMP    #64,D0
  17587.     BLO.S    nozmax
  17588.     MOVE.L    #12700,D1
  17589.     DIVU    D0,D1
  17590.     MOVE    D1,Vol1
  17591.     MOVE    D1,Vol2
  17592.     BRA    sru2
  17593. nozmax    MOVE    #200,Vol1
  17594.     MOVE    #200,Vol2
  17595.     BRA    sru2
  17596.  
  17597. Vol1    dc.w    100
  17598. Vol2    dc.w    100
  17599.  
  17600. TuningTone
  17601.     JSR    WaitForButtonUp
  17602.     CLR.B    RawKeyCode
  17603.     TST    TToneFlag
  17604.     BNE    TToneOff
  17605.     MOVE    #1,TToneFlag
  17606.     MOVE    PattCurPos,D2
  17607.     DIVU    #6,D2
  17608.     ADDQ    #1,D2
  17609.     AND    #3,D2
  17610.     MOVEQ    #1,D0
  17611.     LSL    D2,D0
  17612.     MOVE    D0,TToneBit
  17613.     LEA    $DFF0A0,A0
  17614.     LSL    #4,D2
  17615.     LEA    (A0,D2.W),A0
  17616.     LEA    PeriodTable(PC),A1
  17617.     MOVE    TuneNote,D1
  17618.     LSL    #1,D1
  17619.     MOVE    (A1,D1.W),D1
  17620.     LEA    TToneData,A2
  17621.     MOVE    D0,$DFF096 ; DMACON
  17622.     MOVE.L    A2,(A0)
  17623.     MOVE    #16,4(A0) ; 32 bytes
  17624.     MOVE    D1,6(A0)
  17625.     MOVE    TToneVol,8(A0)
  17626.  
  17627.     JSR    DMAWaitLoop
  17628.  
  17629.     BSET    #15,D0
  17630.     MOVE    D0,$DFF096
  17631.     RTS
  17632.  
  17633. TToneOff
  17634.     CLR    TToneFlag
  17635.     MOVE    TToneBit(PC),$DFF096
  17636.     RTS
  17637.  
  17638. TToneFlag    dc.w 0
  17639. TToneBit    dc.w 0
  17640.  
  17641. SamplePressed
  17642.     CMP    #144,D1
  17643.     BHS.S    spruskp
  17644.     MOVE    LoopStartPos(PC),D2
  17645.     BEQ.S    sprusk5
  17646.     SUBQ    #3,D2
  17647.     CMP    D2,D0
  17648.     BLT.S    sprusk5
  17649.     ADDQ    #4,D2
  17650.     CMP    D2,D0
  17651.     BLO    LoopStartDrag
  17652. sprusk5    MOVE    LoopEndPos(PC),D2
  17653.     BEQ.S    spruskp
  17654.     SUBQ    #3,D2
  17655.     CMP    D2,D0
  17656.     BLT.S    spruskp
  17657.     ADDQ    #4,D2
  17658.     CMP    D2,D0
  17659.     BLO    LoopEndDrag
  17660. spruskp    CMP    #3,D0
  17661.     BLO    Return2
  17662.     CMP    #317,D0
  17663.     BHS    Return2
  17664.     MOVE    D0,LastSamPos
  17665.     BSR    InvertRange
  17666.     MOVE    LastSamPos(PC),D0
  17667.     MOVE    D0,MarkStart
  17668.     MOVE    D0,MarkEnd
  17669.     BSR    InvertRange
  17670.     BSR    MarkToOffset
  17671.     MOVE.L    MarkEndOfs(PC),SamplePos
  17672.     BSR    ShowPos
  17673. sprulop    BTST    #6,$BFE001
  17674.     BNE    spruend
  17675.     MOVE    MouseX(PC),D0
  17676.     CMP    #3,D0
  17677.     BLO    sprusk3
  17678.     CMP    #317,D0
  17679.     BHS    sprusk2
  17680.     BRA    sprusk4
  17681. sprusk2    MOVE    #316,D0
  17682.     BRA    sprusk4
  17683. sprusk3    MOVEQ    #3,D0
  17684. sprusk4    CMP    LastSamPos(PC),D0
  17685.     BEQ    sprulop
  17686.     MOVE    D0,LastSamPos
  17687.     BSR    InvertRange
  17688.     MOVE    LastSamPos(PC),MarkEnd
  17689.     BSR    InvertRange
  17690.     BSR    MarkToOffset
  17691.     MOVE.L    MarkEndOfs(PC),SamplePos
  17692.     BSR    ShowPos
  17693.     BRA    sprulop
  17694. spruend    MOVE    MarkStart(PC),D0
  17695.     MOVE    MarkEnd(PC),D1
  17696.     CMP    D0,D1
  17697.     BHS    MarkToOffset
  17698.     MOVE    D0,MarkEnd
  17699.     MOVE    D1,MarkStart
  17700.     BRA    MarkToOffset
  17701.  
  17702. InvertRange
  17703.     MOVE    MarkStart(PC),D4
  17704.     BEQ    Return2
  17705.     MOVE    MarkEnd(PC),D5
  17706.     MOVE.L    GfxBase(PC),A6
  17707.     JSR    LVOOwnBlitter(A6)
  17708.     JSR    LVOWaitBlit(A6)
  17709. invran3    MOVE    D4,D0
  17710.     MOVEQ    #0,D1
  17711.     MOVE    D4,D2
  17712.     MOVEQ    #64,D3
  17713.     BSR    DrawInvertLine
  17714.     CMP    D5,D4
  17715.     BEQ    invranx
  17716.     BHI    invran2
  17717.     ADDQ    #1,D4
  17718.     BRA    invran3
  17719. invran2    SUBQ    #1,D4
  17720.     BRA    invran3
  17721.  
  17722. invranx    MOVE.L    GfxBase(PC),A6
  17723.     JSR    LVODisownBlitter(A6)
  17724.     RTS
  17725.  
  17726. LoopStartPos    dc.w 0
  17727. LoopEndPos    dc.w 0
  17728.  
  17729. LoopStartDrag
  17730.     CLR    DragType
  17731. LopDrgLop
  17732.     MOVE.L    SongDataPtr(PC),A0
  17733.     MOVE    InsNum(PC),D0
  17734.     BEQ    Return2
  17735.     MULU    #30,D0
  17736.     LEA    12(A0,D0.W),A0
  17737.     MOVE    MouseX(PC),D0
  17738. lsdlop1    BTST    #6,$BFE001
  17739.     BNE    lsdexit
  17740.     MOVE    MouseX(PC),D1
  17741.     CMP    D0,D1
  17742.     BEQ.S    lsdlop1
  17743.     SUB    DragType,D1
  17744.     BPL.S    lsdmsk1
  17745.     MOVEQ    #0,D1
  17746. lsdmsk1    CMP    #314,D1
  17747.     BLO.S    lsdmsk2
  17748.     MOVE    #314,D1
  17749. lsdmsk2    MOVE.L    SamDisplay(PC),D0
  17750.     MULU    D0,D1
  17751.     DIVU    #314,D1
  17752.     MOVE.L    SamOffSet(PC),D0
  17753.     ADD    D1,D0    ; new repeat
  17754.     BCLR    #0,D0
  17755.     MOVEQ    #0,D1
  17756.     MOVE    4(A0),D1 ; old repeat
  17757.     ADD    D1,D1
  17758.     TST    DragType
  17759.     BNE.S    drgrepl
  17760.     MOVE    D1,D3
  17761.     SUB    D1,D0    ; offset
  17762.     ADD    D0,D1
  17763.     MOVE    6(A0),D2
  17764.     ADD    D2,D2
  17765.     ADD    D2,D3
  17766.     SUBQ    #2,D3
  17767.     SUB    D0,D2
  17768.     CMP    D3,D1
  17769.     BLS.S    lsdok
  17770.     MOVE    D3,D1
  17771.     MOVEQ    #2,D2
  17772. lsdok    LSR    #1,D1
  17773.     MOVE    D1,4(A0)
  17774.     LSR    #1,D2
  17775.     MOVE    D2,6(A0)
  17776.     BSR.S    lsdexit
  17777.     BRA    LopDrgLop
  17778. lsdexit    BSR    ShowSampleInfo
  17779.     BSR    UpdateRepeats
  17780.     BRA    SetLoopSprites2
  17781.  
  17782. LoopEndDrag
  17783.     MOVE    #3,DragType
  17784.     BRA    LopDrgLop
  17785.  
  17786. drgrepl    MOVE.L    D0,D2 ; repend
  17787.     SUB.L    D1,D2 ; subtract repstart
  17788.     CMP.L    #2,D2
  17789.     BGT.S    ledskp1
  17790.     MOVEQ    #2,D2
  17791.     BRA.S    lsdok
  17792.  
  17793. ledskp1    MOVE    D1,D0 ; repeat
  17794.     ADD    D2,D0 ; + replen
  17795.     MOVE    (A0),D3
  17796.     ADD    D3,D3
  17797.     CMP    D3,D0
  17798.     BLS.S    lsdok
  17799.     SUB    D1,D3
  17800.     MOVE    D3,D2
  17801.     BRA.S    lsdok
  17802.  
  17803. DragType dc.w 0
  17804.  
  17805. SamDragBar
  17806.     CMP    #4,D0
  17807.     BLO    Return2
  17808.     CMP    #316,D0
  17809.     BHS    Return2
  17810.     CMP    DragStart(PC),D0
  17811.     BLO.S    draglo
  17812.     CMP    DragEnd(PC),D0
  17813.     BHI.S    draghi
  17814.     MOVE    MouseX(PC),D0
  17815.     MOVE    D0,D1
  17816.     SUB    DragStart(PC),D1
  17817.     MOVE    D1,SaveMX
  17818. sdrlop1    BTST    #6,$BFE001
  17819.     BNE    Return2
  17820.     MOVE    MouseX(PC),D1
  17821.     CMP    D0,D1
  17822.     BEQ.S    sdrlop1
  17823.     SUB    SaveMX(PC),D0
  17824.     SUBQ    #4,D0
  17825.     BPL.S    sdrskp1
  17826.     MOVEQ    #0,D0
  17827. sdrskp1    MOVE.L    SamLength(PC),D1
  17828.     BEQ    Return2
  17829.     MULU    D1,D0
  17830.     DIVU    #311,D0
  17831.     AND.L    #$FFFF,D0
  17832.     BSR    dragchk
  17833.     MOVE    MouseX(PC),D0
  17834.     BRA.S    sdrlop1
  17835.  
  17836. draglo    MOVE.L    SamOffSet(PC),D0
  17837.     SUB.L    SamDisplay(PC),D0
  17838.     BPL.S    draglo2
  17839.     MOVEQ    #0,D0
  17840. draglo2    CMP.L    SamOffSet(PC),D0
  17841.     BEQ    Return2
  17842.     MOVE.L    D0,SamOffSet
  17843.     BRA    DisplaySample
  17844.  
  17845. draghi    MOVE.L    SamOffSet(PC),D0
  17846.     ADD.L    SamDisplay(PC),D0
  17847. dragchk    MOVE.L    D0,D1
  17848.     ADD.L    SamDisplay(PC),D1
  17849.     CMP.L    SamLength(PC),D1
  17850.     BLS.S    draglo2
  17851.     MOVE.L    SamLength(PC),D0
  17852.     SUB.L    SamDisplay(PC),D0
  17853.     BRA.S    draglo2
  17854.  
  17855. SaveMX    dc.w    0
  17856.  
  17857. ;----
  17858.  
  17859. MarkToOffset
  17860.     MOVE.L    SamDisplay(PC),D0
  17861.     MOVE    MarkStart(PC),D1
  17862.     BEQ    Return2
  17863.     SUBQ    #3,D1
  17864.     MULU    D0,D1
  17865.     DIVU    #314,D1
  17866.     AND.L    #$FFFF,D1
  17867.     ADD.L    SamOffSet(PC),D1
  17868.     MOVE.L    D1,MarkStartOfs
  17869.     MOVE    MarkEnd(PC),D1
  17870.     CMP    #316,D1
  17871.     BLO.S    mtosome
  17872.     MOVE.L    SamOffSet(PC),D1
  17873.     ADD.L    D0,D1
  17874.     BRA.S    mtoexit
  17875. mtosome    SUBQ    #3,D1
  17876.     MULU    D0,D1
  17877.     DIVU    #314,D1
  17878.     AND.L    #$FFFF,D1
  17879.     ADD.L    SamOffSet(PC),D1
  17880. mtoexit    MOVE.L    D1,MarkEndOfs
  17881.     RTS
  17882.  
  17883. OffsetToMark
  17884.     MOVE.L    MarkStartOfs(PC),D0
  17885.     BMI.S    otmout
  17886.     MOVE    #3,MarkStart
  17887.     SUB.L    SamOffSet(PC),D0
  17888.     BMI.S    otmskip    ; set to start if before offset
  17889.     MULU    #314,D0
  17890.     MOVE.L    SamDisplay(PC),D1
  17891.     BEQ.S    otmskip
  17892.     DIVU    D1,D0
  17893.     CMP    #314,D0
  17894.     BHI.S    otmout    ; if start after display
  17895.     ADD    D0,MarkStart
  17896. otmskip    MOVE    #3,MarkEnd
  17897.     MOVE.L    MarkEndOfs(PC),D0
  17898.     SUB.L    SamOffSet(PC),D0
  17899.     BMI.S    otmout    ; if end before offset
  17900.     MULU    #314,D0
  17901.     MOVE.L    SamDisplay(PC),D1
  17902.     BEQ    Return2
  17903.     DIVU    D1,D0
  17904.     CMP    #313,D0
  17905.     BLS.S    otmok
  17906.     MOVE    #313,D0    ; set to end if after display
  17907. otmok    ADD    D0,MarkEnd
  17908.     RTS
  17909.  
  17910. otmout    CLR    MarkStart
  17911.     RTS
  17912.  
  17913. SamScrEnable    dc.w    0
  17914. SamMemPtr    dc.l    0
  17915. SamMemSize    dc.l    0
  17916. LastSamPos    dc.w    0
  17917. MarkStart    dc.w    0
  17918. MarkEnd        dc.w    0
  17919. MarkStartOfs    dc.l    0
  17920. MarkEndOfs    dc.l    0
  17921.  
  17922. ;---- Sample graphing stuff ----
  17923.  
  17924. DisplaySample
  17925.     TST    SamScrEnable
  17926.     BEQ    Return2
  17927.     BSR    rdsdoit
  17928.     TST.L    MarkStartOfs
  17929.     BMI    Return2
  17930.     BSR    OffsetToMark
  17931.     BRA    InvertRange
  17932.  
  17933. RedrawSample
  17934.     TST    SamScrEnable
  17935.     BEQ    Return2
  17936.     MOVEQ    #-1,D0
  17937.     MOVE.L    D0,MarkStartOfs
  17938.     CLR    MarkStart
  17939.     MOVE    InsNum(PC),D0
  17940.     BEQ    rdsblnk
  17941.     LEA    SampleStarts(PC),A1
  17942.     SUBQ    #1,D0
  17943.     LSL    #2,D0
  17944.     MOVE.L    (A1,D0.W),SamStart
  17945.     BEQ    rdsblnk
  17946.     MOVE.L    124(A1,D0.W),D1
  17947.     BEQ    rdsblnk
  17948.     MOVE.L    D1,SamLength
  17949.     CLR.L    SamOffSet
  17950.     MOVE.L    D1,SamDisplay
  17951.     BRA    rdsdoit
  17952. rdsblnk    LEA    BlankSample,A0
  17953.     MOVE.L    A0,SamStart
  17954.     MOVE.L    #314,SamLength
  17955.     CLR.L    SamOffSet
  17956.     MOVE.L    #314,SamDisplay
  17957. rdsdoit    MOVE.L    GfxBase(PC),A6
  17958.     JSR    LVOOwnBlitter(A6)
  17959.     JSR    LVOWaitBlit(A6)
  17960.     BSR    ClearSamArea
  17961.     MOVE.L    SamStart(PC),A0
  17962.     MOVEQ    #0,D4
  17963.     MOVE.L    SamOffSet(PC),D5
  17964.     MOVE.L    SamDisplay(PC),D6
  17965.     MOVE.L    D5,D7
  17966.     MOVE.L    A0,D0
  17967.     ADD.L    D5,D0
  17968.     MOVE.L    D0,SamDrawStart
  17969.     ADD.L    D6,D0
  17970.     MOVE.L    D0,SamDrawEnd
  17971. rdsloop    MOVE    D4,D0
  17972.     ADDQ    #3,D0
  17973.     MOVEQ    #127,D1
  17974.     SUB.B    (A0,D7.L),D1
  17975.     LSR    #2,D1
  17976.     TST    D4
  17977.     BNE    rdsdraw
  17978.     BSR    MoveTo
  17979.     BRA    rdsupdt
  17980. rdsdraw    BSR    DrawTo
  17981. rdsupdt    ADDQ    #1,D4
  17982.     MOVE.L    D4,D7
  17983.     MULU    D6,D7
  17984.     DIVU    #314,D7
  17985.     AND.L    #$FFFF,D7
  17986.     ADD.L    D5,D7
  17987.     CMP    #314,D4
  17988.     BLO    rdsloop
  17989.  
  17990.     MOVE.L    GfxBase(PC),A6
  17991.     JSR    LVODisownBlitter(A6)
  17992.     BSR.S    SetDragBar
  17993.     MOVE.L    SamDisplay(PC),D0
  17994.     LEA    BlankSample,A0
  17995.     CMP.L    SamStart,A0
  17996.     BNE.S    rdsslwo
  17997.     MOVEQ    #0,D0
  17998. rdsslwo    MOVE    #215*40+33,TextOffset
  17999.     BSR    Print6DecDigits
  18000.     BRA    SetLoopSprites
  18001.  
  18002. SamStart    dc.l    0
  18003. SamLength    dc.l    0
  18004. SamOffSet    dc.l    0
  18005. SamDisplay    dc.l    0
  18006. SavSamIns    dc.w    0
  18007.  
  18008. SetDragBar
  18009.     MOVE    #4*10-1,D0
  18010.     MOVE.L    TextBplPtr,A0
  18011.     LEA    5560+2720(A0),A0
  18012.     MOVEQ    #0,D1
  18013. sdblop2    MOVE.L    D1,(A0)+
  18014.     DBF    D0,sdblop2
  18015.     MOVE.L    SamLength(PC),D0
  18016.     BEQ    Return2
  18017.     MOVE.L    SamOffSet(PC),D4
  18018.     MOVE.L    SamDisplay(PC),D5
  18019.     CMP.L    D0,D5
  18020.     BEQ    Return2
  18021.     ADD.L    D4,D5
  18022.     MULU    #311,D4
  18023.     DIVU    D0,D4
  18024.     ADDQ    #4,D4
  18025.     MOVE    D4,DragStart
  18026.     MULU    #311,D5
  18027.     DIVU    D0,D5
  18028.     ADDQ    #5,D5
  18029.     MOVE    D5,DragEnd
  18030.     MOVE.L    GfxBase(PC),A6
  18031.     JSR    LVOOwnBlitter(A6)
  18032.     JSR    LVOWaitBlit(A6)
  18033.     MOVEQ    #68,D6
  18034.     MOVEQ    #3,D7
  18035. sdbloop    MOVE    D4,D0
  18036.     MOVE.L    D6,D1
  18037.     MOVE    D5,D2
  18038.     MOVE.L    D6,D3
  18039.     BSR.S    DrawLine
  18040.     ADDQ.L    #1,D6
  18041.     DBF    D7,sdbloop
  18042.     MOVE.L    GfxBase(PC),A6
  18043.     JSR    LVODisownBlitter(A6)
  18044.     RTS
  18045.  
  18046. DragStart    dc.w    0
  18047. DragEnd        dc.w    0
  18048.  
  18049. ;---- Line Routine ----
  18050.  
  18051. DrawInvertLine
  18052.     MOVE.B    #$48,MinTerm
  18053.     BSR.S    DrawLine
  18054.     MOVE.B    #$C8,MinTerm
  18055.     RTS
  18056.  
  18057. MoveTo    MOVE    D0,PenX
  18058.     MOVE    D1,PenY
  18059.     RTS
  18060.  
  18061. DrawTo    MOVE    PenX(PC),D2
  18062.     MOVE    PenY(PC),D3
  18063.     MOVE    D0,PenX
  18064.     MOVE    D1,PenY
  18065. DrawLine
  18066.     MOVEM.L    D4-D7,-(SP)
  18067.     MOVEQ    #0,D4
  18068.     SUB    D1,D3
  18069.     BGE.S    dypos
  18070.     NEG    D3
  18071.     BRA.S    dyneg
  18072. dypos    BSET    #0,D4
  18073. dyneg    SUB    D0,D2
  18074.     BGE.S    dxpos
  18075.     NEG    D2
  18076.     BRA.S    dxneg
  18077. dxpos    BSET    #1,D4
  18078. dxneg    MOVE    D2,D5
  18079.     SUB    D3,D5
  18080.     BGE.S    dxdypos
  18081.     EXG    D2,D3
  18082.     BRA.S    dxdyneg
  18083. dxdypos    BSET    #2,D4
  18084. dxdyneg    MOVEQ    #0,D5
  18085.     ROR    #4,D0
  18086.     OR    #$0B00,D0
  18087.     MOVE.B    D0,D5
  18088.     MOVE.B    MinTerm(PC),D0
  18089.     LSL    #1,D5
  18090.     MULS    #ScrWidth,D1
  18091.     ADD    D5,D1
  18092.     ADD.L    LineScreen(PC),D1
  18093. blitrdy    BTST    #14,$DFF002 ; DMACONR
  18094.     BNE.S    blitrdy
  18095.     MOVE    $DFF01C,-(SP)
  18096.     BSET    #7,(SP)
  18097.     MOVE    #$7FFF,$DFF09A
  18098.     MOVE.B    Octants(PC,D4),D4
  18099.     ADD.L    D3,D3
  18100.     MOVE    D3,$DFF062 ; BLTBMOD
  18101.     SUB    D2,D3
  18102.     BGE.S    dldspos
  18103.     OR.B    #$40,D4
  18104. dldspos    MOVE.L    D3,$DFF050 ; BLTAPTR
  18105.     SUB    D2,D3
  18106.     MOVE    D3,$DFF064 ; BLTAMOD
  18107.     MOVE    D4,$DFF042 ; BLTCON1
  18108.     MOVE    D0,$DFF040 ; BLTCON0
  18109.     MOVE.L    D1,$DFF048 ; BLTCPTR
  18110.     MOVE.L    D1,$DFF054 ; BLTDPTR
  18111.     MOVE    #ScrWidth,$DFF060 ; BLTCMOD
  18112.     MOVE    #ScrWidth,$DFF066 ; BLTDMOD
  18113.     MOVE    #$8000,$DFF074 ; BLTADAT
  18114.     MOVE    #$FFFF,$DFF044 ; BLTAFWM
  18115.     MOVE    LinMask(PC),$DFF072 ; BLTBDAT
  18116.     ASL    #6,D2
  18117.     ADD    #2,D2
  18118.     MOVE    D2,$DFF058 ; BLTSIZE
  18119.     MOVE    (SP)+,$DFF09A
  18120.     MOVEM.L    (SP)+,D4-D7
  18121.     RTS
  18122.  
  18123. ScrWidth = 40
  18124.  
  18125. Octants    dc.b    3*4+1,2*4+1,1*4+1,0*4+1,7*4+1,5*4+1,6*4+1,4*4+1
  18126. LinMask    dc.w    $FFFF
  18127. MinTerm    dc.b    $C8 ;was $CA
  18128.     dc.b    0   ;free 0
  18129. PenX    dc.w    0
  18130. PenY    dc.w    0
  18131. LineScreen dc.l    0
  18132.  
  18133. ;---- Loop Sprites ----
  18134.  
  18135. SetLoopSprites
  18136.     MOVEQ    #-1,D6
  18137.     MOVEQ    #-1,D7
  18138.     MOVE    InsNum(PC),D0
  18139.     BEQ    slsset
  18140.     MULU    #30,D0
  18141.     MOVE.L    SongDataPtr(PC),A0
  18142.     LEA    12(A0,D0.W),A0
  18143. SetLoopSprites2
  18144.     TST    SamScrEnable
  18145.     BEQ    Return2
  18146.     CLR    LoopOnOffFlag
  18147.     MOVEQ    #-1,D6
  18148.     MOVEQ    #-1,D7
  18149.     MOVEQ    #0,D0
  18150.     MOVE    4(A0),D0
  18151.     ADD.L    D0,D0
  18152.     MOVEQ    #0,D1
  18153.     MOVE    6(A0),D1
  18154.     ADD.L    D1,D1
  18155.     MOVE.L    D0,D5
  18156.     ADD.L    D1,D5
  18157.     CMP    #2,D5
  18158.     BLS.S    slsset
  18159.     MOVE    #1,LoopOnOffFlag
  18160.     MOVE.L    SamOffSet(PC),D2
  18161.     MOVE.L    SamDisplay(PC),D3
  18162.     MOVE.L    D2,D4
  18163.     ADD.L    D3,D4
  18164.     CMP.L    D2,D0
  18165.     BLO.S    1$
  18166.     CMP.L    D4,D0
  18167.     BHI.S    1$
  18168.     SUB.L    D2,D0
  18169.     MULU    #314,D0
  18170.     DIVU    D3,D0
  18171.     ADDQ    #3,D0
  18172.     MOVE    D0,D6
  18173. 1$    CMP.L    D2,D5
  18174.     BLO.S    slsset
  18175.     CMP.L    D4,D5
  18176.     BHI.S    slsset
  18177.     SUB.L    D2,D5
  18178.     MULU    #314,D5
  18179.     DIVU    D3,D5
  18180.     ADDQ    #6,D5
  18181.     MOVE    D5,D7
  18182. slsset    MOVE    #139,D1
  18183.     MOVE    D6,D0
  18184.     BPL.S    1$
  18185.     MOVEQ    #0,D0
  18186.     MOVE    #270,D1
  18187. 1$    MOVEQ    #64,D2
  18188.     LEA    LoopSpriteData1,A0
  18189.     MOVE    D0,LoopStartPos
  18190.     BSR    SetSpritePos
  18191.     MOVE    #139,D1
  18192.     MOVE    D7,D0
  18193.     BPL.S    2$
  18194.     MOVEQ    #0,D0
  18195.     MOVE    #270,D1
  18196. 2$    MOVEQ    #64,D2
  18197.     LEA    LoopSpriteData2,A0
  18198.     MOVE    D0,LoopEndPos
  18199.     BSR    SetSpritePos
  18200.     BRA    ShowLoopToggle
  18201.  
  18202. ;---- Playroutine ----
  18203.  
  18204. audchan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  18205. audchan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  18206. audchan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  18207. audchan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  18208.  
  18209. IntMusic
  18210.     MOVEM.L    D0-D7/A0-A6,-(SP)
  18211.     ;jsr    SetNewPitchCtrl
  18212.     MOVE.L    RunMode(PC),D0
  18213.     BEQ    NoNewPositionYet
  18214.     CMP.L    #'patt',D0
  18215.     BEQ.S    .s1
  18216.     MOVE.L    SongPosition(PC),CurrPos
  18217. .s1    MOVE.L    SongDataPtr(PC),A0
  18218.     MOVE.B    sd_numofpatt(A0),SongNumOfPatt+1
  18219.     TST    StepPlayEnable
  18220.     BNE.S    .s2
  18221.     ADDQ.L    #1,Counter
  18222.     MOVE.L    Counter(PC),D0
  18223.     CMP.L    CurrSpeed(PC),D0
  18224.     BLO.S    NoNewNote
  18225. .s2    CLR.L    Counter
  18226.     TST.B    PattDelayTime2
  18227.     BEQ.S    GetNewNote
  18228.     BSR.S    NoNewAllChannels
  18229.     BRA    dskip
  18230.  
  18231. NoNewNote
  18232.     BSR.S    NoNewAllChannels
  18233.     BRA    NoNewPositionYet
  18234.  
  18235. NoNewAllChannels
  18236.     LEA    audchan1toggle,A4
  18237.     LEA    audchan1temp(PC),A6
  18238.     LEA    $DFF0A0,A5
  18239.     BSR    CheckEffects
  18240.     LEA    audchan2toggle,A4
  18241.     LEA    audchan2temp(PC),A6
  18242.     LEA    $DFF0B0,A5
  18243.     BSR    CheckEffects
  18244.     LEA    audchan3toggle,A4
  18245.     LEA    audchan3temp(PC),A6
  18246.     LEA    $DFF0C0,A5
  18247.     BSR    CheckEffects
  18248.     LEA    audchan4toggle,A4
  18249.     LEA    audchan4temp(PC),A6
  18250.     LEA    $DFF0D0,A5
  18251.     BSR    CheckEffects
  18252.     RTS
  18253.  
  18254.  
  18255.  
  18256.  
  18257. GetNewNote
  18258.     LEA    12(A0),A3
  18259.     LEA    sd_pattpos(A0),A2
  18260.     LEA    sd_patterndata(A0),A0
  18261.     MOVEQ    #0,D1
  18262.     MOVE.L    SongPosition(PC),D0
  18263.     MOVE.B    (A2,D0.W),D1
  18264.  
  18265.     CMP.L    #'patt',RunMode
  18266.     BNE.S    1$
  18267.     MOVE.L    PatternNumber(PC),D1
  18268. 1$    ASL.L    #8,D1
  18269.  
  18270.     ASL.L    #2,D1
  18271.     ADD.L    PatternPosition(PC),D1
  18272.     MOVE.L    D1,PatternPtr
  18273.     CLR    DMACONtemp
  18274.     LEA    audchan1toggle,A4
  18275.     LEA    $DFF0A0,A5
  18276.     LEA    audchan1temp(PC),A6
  18277.     MOVEQ    #1,D2
  18278.     BSR    PlayVoice
  18279.     MOVEQ    #0,D0
  18280.     MOVE.B    n_volume(A6),D0
  18281.     MOVE    D0,8(A5)
  18282.     LEA    audchan2toggle,A4
  18283.     LEA    $DFF0B0,A5
  18284.     LEA    audchan2temp(PC),A6
  18285.     MOVEQ    #2,D2
  18286.     BSR.S    PlayVoice
  18287.     MOVEQ    #0,D0
  18288.     MOVE.B    n_volume(A6),D0
  18289.     MOVE    D0,8(A5)
  18290.     LEA    audchan3toggle,A4
  18291.     LEA    $DFF0C0,A5
  18292.     LEA    audchan3temp(PC),A6
  18293.     MOVEQ    #3,D2
  18294.     BSR.S    PlayVoice
  18295.     MOVEQ    #0,D0
  18296.     MOVE.B    n_volume(A6),D0
  18297.     MOVE    D0,8(A5)
  18298.     LEA    audchan4toggle,A4
  18299.     LEA    $DFF0D0,A5
  18300.     LEA    audchan4temp(PC),A6
  18301.     MOVEQ    #4,D2
  18302.     BSR.S    PlayVoice
  18303.     MOVEQ    #0,D0
  18304.     MOVE.B    n_volume(A6),D0
  18305.     MOVE    D0,8(A5)
  18306.     BRA    SetDMA
  18307.  
  18308. CheckMetronome
  18309.     CMP.B    MetroChannel,D2
  18310.     BNE    Return2
  18311.     MOVE.B    MetroSpeed,D2
  18312.     BEQ    Return2
  18313.     MOVE.L    PatternPosition,D3
  18314.     LSR.L    #4,D3
  18315.     DIVU    D2,D3
  18316.     SWAP    D3
  18317.     TST    D3
  18318.     BNE    Return2
  18319.     AND.L    #$00000FFF,(A6)
  18320.     OR.L    #$10D6F000,(A6) ; Play sample $1F at period $0D6 (214)
  18321.     RTS
  18322.  
  18323.  
  18324. ;----------------------------------------------
  18325. PlayVoice
  18326.     TST.L    (A6)
  18327.     BNE.S    plvskip
  18328.     BSR    PerNop
  18329. plvskip    MOVE.L    (A0,D1.L),(A6)    ; Read note from pattern
  18330.     BSR.S    CheckMetronome
  18331.     ADDQ.L    #4,D1
  18332.     MOVEQ    #0,D2
  18333.     MOVE.B    n_cmd(A6),D2    ; Get lower 4 bits of instrument
  18334.     AND.B    #$F0,D2
  18335.     LSR.B    #4,D2
  18336.     MOVE.B    (A6),D0        ; Get higher 4 bits of instrument
  18337.     AND.B    #$F0,D0
  18338.     OR.B    D0,D2
  18339.     TST.B    D2
  18340.     BEQ    SetRegisters    ; Instrument was zero
  18341.     MOVEQ    #0,D3
  18342.     LEA    SampleStarts(PC),A1
  18343.     MOVE    D2,D4
  18344.     MOVE.B    D2,n_samplenum(A6)
  18345.     SUBQ.L    #1,D2
  18346.     LSL.L    #2,D2
  18347.     MULU    #30,D4
  18348.     MOVE.L    (A1,D2.L),n_start(A6)
  18349.     MOVE    (A3,D4.L),n_length(A6)
  18350.     MOVE    (A3,D4.L),n_reallength(A6)
  18351.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  18352.     MOVE.B    3(A3,D4.L),n_volume(A6)
  18353.     MOVE    4(A3,D4.L),D3 ; Get repeat
  18354.     TST    D3
  18355.     BEQ.S    NoLoop
  18356.     MOVE.L    n_start(A6),D2    ; Get start
  18357.     ASL    #1,D3
  18358.     ADD.L    D3,D2        ; Add repeat
  18359.     MOVE.L    D2,n_loopstart(A6)
  18360.     MOVE.L    D2,n_wavestart(A6)
  18361.     MOVE    4(A3,D4.L),D0    ; Get repeat
  18362.     ADD    6(A3,D4.L),D0    ; Add replen
  18363.     MOVE    D0,n_length(A6)
  18364.     MOVE    6(A3,D4.L),n_replen(A6)    ; Save replen
  18365.     BRA.S    SetRegisters
  18366.  
  18367. NoLoop    MOVE.L    n_start(A6),D2
  18368.     ADD.L    D3,D2
  18369.     MOVE.L    D2,n_loopstart(A6)
  18370.     MOVE.L    D2,n_wavestart(A6)
  18371.     MOVE    6(A3,D4.L),n_replen(A6)    ; Save replen
  18372. SetRegisters
  18373.     MOVE    (A6),D0
  18374.     AND    #$0FFF,D0
  18375.     BEQ    CheckMoreEffects    ; If no note
  18376.     MOVE    2(A6),D0
  18377.     AND    #$0FF0,D0
  18378.     CMP    #$0E50,D0 ; finetune
  18379.     BEQ.S    DoSetFineTune
  18380.     MOVE.B    2(A6),D0
  18381.     AND.B    #$0F,D0
  18382.     CMP.B    #3,D0    ; TonePortamento
  18383.     BEQ.S    ChkTonePorta
  18384.     CMP.B    #5,D0    ; TonePortamento + VolSlide
  18385.     BEQ.S    ChkTonePorta
  18386.     CMP.B    #9,D0    ; Sample Offset
  18387.     BNE.S    SetPeriod
  18388.     BSR    CheckMoreEffects
  18389.     BRA.S    SetPeriod
  18390.  
  18391. DoSetFineTune
  18392.     BSR    SetFineTune
  18393.     BRA.S    SetPeriod
  18394.  
  18395. ChkTonePorta
  18396.     BSR    SetTonePorta
  18397.     BRA    CheckMoreEffects
  18398.  
  18399.  
  18400.  
  18401.  
  18402.  
  18403. SetPeriod
  18404.     MOVEM.L    D0-D1/A0-A1,-(SP)
  18405.     MOVE    (A6),D1
  18406.     AND    #$0FFF,D1
  18407.     LEA    PeriodTable(PC),A1
  18408.     MOVEQ    #0,D0
  18409.     MOVEQ    #$24,D7
  18410. ftuloop    CMP    (A1,D0.W),D1
  18411.     BHS    ftufound
  18412.     ADDQ.L    #2,D0
  18413.     DBF    D7,ftuloop
  18414. ftufound
  18415.     MOVEQ    #0,D1
  18416.     MOVE.B    n_finetune(A6),D1
  18417.     MULU    #37*2,D1
  18418.     ADD.L    D1,A1
  18419.     MOVE    (A1,D0.W),n_period(A6)
  18420.     MOVEM.L    (SP)+,D0-D1/A0-A1
  18421.  
  18422.     MOVE    2(A6),D0
  18423.     AND    #$0FF0,D0
  18424.     CMP    #$0ED0,D0
  18425.     BEQ    CheckMoreEffects
  18426.  
  18427.     MOVE    n_dmabit(A6),$DFF096
  18428.     BTST    #2,n_wavecontrol(A6)
  18429.     BNE    vibnoc
  18430.     CLR.B    n_vibratopos(A6)
  18431. vibnoc    BTST    #6,n_wavecontrol(A6)
  18432.     BNE    trenoc
  18433.     CLR.B    n_tremolopos(A6)
  18434. trenoc    MOVE    n_length(A6),4(A5)    ; Set length
  18435.     MOVE.L    n_start(A6),(A5)    ; Set start
  18436.     BNE    sdmaskp
  18437.     CLR.L    n_loopstart(A6)
  18438.     MOVEQ    #1,D0
  18439.     MOVE    D0,4(A5)
  18440.     MOVE    D0,n_replen(A6)
  18441. sdmaskp    MOVE    n_period(A6),D0
  18442.  
  18443.     MOVE    D0,6(A5)        ; Set period
  18444.     JSR    SpectrumAnalyzer    ; Do the analyzer
  18445.     ST    n_trigger(A6)
  18446.     MOVE    n_dmabit(A6),D0
  18447.     OR    D0,DMACONtemp
  18448.     BRA    CheckMoreEffects
  18449.  
  18450. SetDMA    JSR    DMAWaitLoop
  18451.     MOVE    DMACONtemp,D0
  18452.     AND    ActiveChannels,D0
  18453.     OR    #$8000,D0
  18454.     MOVE    D0,$DFF096
  18455.     JSR    DMAWaitLoop
  18456.     LEA    $DFF000,A5
  18457.     LEA    audchan4temp(PC),A6
  18458.     MOVE.L    n_loopstart(A6),$D0(A5)
  18459.     MOVE    n_replen(A6),$D4(A5)
  18460.     LEA    audchan3temp(PC),A6
  18461.     MOVE.L    n_loopstart(A6),$C0(A5)
  18462.     MOVE    n_replen(A6),$C4(A5)
  18463.     LEA    audchan2temp(PC),A6
  18464.     MOVE.L    n_loopstart(A6),$B0(A5)
  18465.     MOVE    n_replen(A6),$B4(A5)
  18466.     LEA    audchan1temp(PC),A6
  18467.     MOVE.L    n_loopstart(A6),$A0(A5)
  18468.     MOVE    n_replen(A6),$A4(A5)
  18469.  
  18470. dskip    TST.L    RunMode
  18471.     BEQ    dskipx
  18472.     BSR    SetPatternPos
  18473. dskipx    MOVE.L    PatternPosition(PC),D0
  18474.     LSR.L    #4,D0
  18475.     MOVE    D0,ScrPattPos
  18476.     ADD.L    #16,PatternPosition
  18477.     MOVE.B    PattDelayTime,D0
  18478.     BEQ    dskpc
  18479.     MOVE.B    D0,PattDelayTime2
  18480.     CLR.B    PattDelayTime
  18481. dskpc    TST.B    PattDelayTime2
  18482.     BEQ    dskpa
  18483.     SUBQ.B    #1,PattDelayTime2
  18484.     BEQ    dskpa
  18485.     SUB.L    #16,PatternPosition
  18486. dskpa    TST.B    PBreakFlag
  18487.     BEQ    nnpysk
  18488.     SF    PBreakFlag
  18489.     MOVEQ    #0,D0
  18490.     MOVE.B    PBreakPosition(PC),D0
  18491.     LSL    #4,D0
  18492.     MOVE.L    D0,PatternPosition
  18493.     CLR.B    PBreakPosition
  18494. nnpysk    TST    StepPlayEnable
  18495.     BEQ    nnpysk2
  18496.     BSR    DoStopIt
  18497.     CLR    StepPlayEnable
  18498.     MOVE.L    PatternPosition(PC),D0
  18499.     LSR.L    #4,D0
  18500.     AND    #63,D0
  18501.     MOVE    D0,ScrPattPos
  18502. nnpysk2    CMP.L    #1024,PatternPosition
  18503.     BNE    NoNewPositionYet
  18504. NextPosition
  18505.     MOVEQ    #0,D0
  18506.     MOVE.B    PBreakPosition(PC),D0
  18507.     LSL    #4,D0
  18508.     MOVE.L    D0,PatternPosition
  18509.     CLR.B    PBreakPosition
  18510.     CLR.B    PosJumpAssert
  18511.     CMP.L    #'patp',RunMode
  18512.     BNE    NoNewPositionYet
  18513.     ADDQ.L    #1,SongPosition
  18514.     AND.L    #$7F,SongPosition
  18515.     MOVE.L    SongPosition(PC),D1
  18516.     MOVE.L    SongDataPtr(PC),A0
  18517.     CMP.B    sd_numofpatt(A0),D1
  18518.     BLO    NoNewPositionYet
  18519.     CLR.L    SongPosition
  18520.  
  18521.     TST    StepPlayEnable
  18522.     BEQ    NoNewPositionYet
  18523.     BSR    DoStopIt
  18524.     CLR    StepPlayEnable
  18525.     MOVE.L    PatternPosition(PC),D0
  18526.     LSR.L    #4,D0
  18527.     MOVE    D0,ScrPattPos
  18528.  
  18529. NoNewPositionYet
  18530.     TST.B    PosJumpAssert
  18531.     BNE    NextPosition
  18532.     MOVEM.L    (SP)+,D0-D7/A0-A6
  18533.     RTS
  18534.  
  18535. CheckEffects
  18536.     TST    (A4)
  18537.     BEQ    Return2
  18538.     BSR    chkefx2
  18539.     MOVEQ    #0,D0
  18540.     MOVE.B    n_volume(A6),D0
  18541.     MOVE    D0,8(A5)
  18542.     RTS
  18543.  
  18544. chkefx2    BSR    UpdateFunk
  18545.     MOVE    n_cmd(A6),D0
  18546.     AND    #$0FFF,D0
  18547.     BEQ    Return2
  18548.     MOVE.B    n_cmd(A6),D0
  18549.     AND.B    #$0F,D0
  18550.     TST.B    D0
  18551.     BEQ    Arpeggio
  18552.     CMP.B    #1,D0
  18553.     BEQ    PortaUp
  18554.     CMP.B    #2,D0
  18555.     BEQ    PortaDown
  18556.     CMP.B    #3,D0
  18557.     BEQ    TonePortamento
  18558.     CMP.B    #4,D0
  18559.     BEQ    Vibrato
  18560.     CMP.B    #5,D0
  18561.     BEQ    TonePlusVolSlide
  18562.     CMP.B    #6,D0
  18563.     BEQ    VibratoPlusVolSlide
  18564.     CMP.B    #$E,D0
  18565.     BEQ    E_Commands
  18566. SetBack    MOVE    n_period(A6),6(A5)
  18567.     CMP.B    #7,D0
  18568.     BEQ    Tremolo
  18569.     CMP.B    #$A,D0
  18570.     BEQ    VolumeSlide
  18571. Return2    RTS
  18572.  
  18573. PerNop    MOVE    n_period(A6),6(A5)
  18574.     RTS
  18575.  
  18576. Arpeggio
  18577.     MOVEQ    #0,D0
  18578.     MOVE.L    Counter(PC),D0
  18579.     DIVS    #3,D0
  18580.     SWAP    D0
  18581.     CMP    #1,D0
  18582.     BEQ    Arpeggio1
  18583.     CMP    #2,D0
  18584.     BEQ    Arpeggio2
  18585. Arpeggio0
  18586.     MOVE    n_period(A6),D2
  18587.     BRA    ArpeggioSet
  18588.  
  18589. Arpeggio1
  18590.     MOVEQ    #0,D0
  18591.     MOVE.B    n_cmdlo(A6),D0
  18592.     LSR.B    #4,D0
  18593.     BRA    ArpeggioFind
  18594.  
  18595. Arpeggio2
  18596.     MOVEQ    #0,D0
  18597.     MOVE.B    n_cmdlo(A6),D0
  18598.     AND.B    #15,D0
  18599. ArpeggioFind
  18600.     ASL    #1,D0
  18601.     MOVEQ    #0,D1
  18602.     MOVE.B    n_finetune(A6),D1
  18603.     MULU    #37*2,D1
  18604.     LEA    PeriodTable(PC),A0
  18605.     ADD.L    D1,A0
  18606.     MOVEQ    #0,D1
  18607.     MOVE    n_period(A6),D1
  18608.     MOVEQ    #$24,D7
  18609. arploop    MOVE    (A0,D0.W),D2
  18610.     CMP    (A0),D1
  18611.     BHS    ArpeggioSet
  18612.     ADDQ.L    #2,A0
  18613.     DBF    D7,arploop
  18614.     RTS
  18615.  
  18616. ArpeggioSet
  18617.     MOVE    D2,6(A5)
  18618.     RTS
  18619.  
  18620. FinePortaUp
  18621.     TST.L    Counter
  18622.     BNE    Return2
  18623.     MOVE.B    #$0F,LowMask
  18624. PortaUp    MOVEQ    #0,D0
  18625.     MOVE.B    n_cmdlo(A6),D0
  18626.     AND.B    LowMask,D0
  18627.     MOVE.B    #$FF,LowMask
  18628.     SUB    D0,n_period(A6)
  18629.     MOVE    n_period(A6),D0
  18630.     AND    #$0FFF,D0
  18631.     CMP    #$0071,D0
  18632.     BPL    PortaUskip
  18633.     AND    #$F000,n_period(A6)
  18634.     OR    #$0071,n_period(A6)
  18635. PortaUskip    MOVE    n_period(A6),D0
  18636.     AND    #$0FFF,D0
  18637.     MOVE    D0,6(A5)
  18638.     RTS
  18639.  
  18640. FinePortaDown
  18641.     TST.L    Counter
  18642.     BNE    Return2
  18643.     MOVE.B    #$0F,LowMask
  18644. PortaDown
  18645.     CLR    D0
  18646.     MOVE.B    n_cmdlo(A6),D0
  18647.     AND.B    LowMask,D0
  18648.     MOVE.B    #$FF,LowMask
  18649.     ADD    D0,n_period(A6)
  18650.     MOVE    n_period(A6),D0
  18651.     AND    #$0FFF,D0
  18652.     CMP    #$0358,D0
  18653.     BMI    PortaDskip
  18654.     AND    #$F000,n_period(A6)
  18655.     OR    #$0358,n_period(A6)
  18656. PortaDskip
  18657.     MOVE    n_period(A6),D0
  18658.     AND    #$0FFF,D0
  18659.     MOVE    D0,6(A5)
  18660.     RTS
  18661.  
  18662. SetTonePorta
  18663.     MOVE.L    A0,-(SP)
  18664.     MOVE    (A6),D2
  18665.     AND    #$0FFF,D2
  18666.     MOVEQ    #0,D0
  18667.     MOVE.B    n_finetune(A6),D0
  18668.     MULU    #37*2,D0
  18669.     LEA    PeriodTable(PC),A0
  18670.     ADD.L    D0,A0
  18671.     MOVEQ    #0,D0
  18672. StpLoop    CMP    (A0,D0.W),D2
  18673.     BHS    StpFound
  18674.     ADDQ    #2,D0
  18675.     CMP    #37*2,D0
  18676.     BLO    StpLoop
  18677.     MOVEQ    #35*2,D0
  18678. StpFound
  18679.     MOVE.B    n_finetune(A6),D2
  18680.     AND.B    #8,D2
  18681.     BEQ    StpGoss
  18682.     TST    D0
  18683.     BEQ    StpGoss
  18684.     SUBQ    #2,D0
  18685. StpGoss    MOVE    (A0,D0.W),D2
  18686.     MOVE.L    (SP)+,A0
  18687.     MOVE    D2,n_wantedperiod(A6)
  18688.     MOVE    n_period(A6),D0
  18689.     CLR.B    n_toneportdirec(A6)
  18690.     CMP    D0,D2
  18691.     BEQ    ClearTonePorta
  18692.     BGE    Return2
  18693.     MOVE.B    #1,n_toneportdirec(A6)
  18694.     RTS
  18695.  
  18696. ClearTonePorta
  18697.     CLR    n_wantedperiod(A6)
  18698.     RTS
  18699.  
  18700.  
  18701. TonePortamento
  18702.     MOVE.B    n_cmdlo(A6),D0
  18703.     BEQ    TonePortNoChange
  18704.     MOVE.B    D0,n_toneportspeed(A6)
  18705.     CLR.B    n_cmdlo(A6)
  18706. TonePortNoChange
  18707.     TST    n_wantedperiod(A6)
  18708.     BEQ    Return2
  18709.     MOVEQ    #0,D0
  18710.     MOVE.B    n_toneportspeed(A6),D0
  18711.     TST.B    n_toneportdirec(A6)
  18712.     BNE    TonePortaUp
  18713. TonePortaDown
  18714.     ADD    D0,n_period(A6)
  18715.     MOVE    n_wantedperiod(A6),D0
  18716.     CMP    n_period(A6),D0
  18717.     BGT    TonePortaSetPer
  18718.     MOVE    n_wantedperiod(A6),n_period(A6)
  18719.     CLR    n_wantedperiod(A6)
  18720.     BRA    TonePortaSetPer
  18721.  
  18722. TonePortaUp
  18723.     SUB    D0,n_period(A6)
  18724.     MOVE    n_wantedperiod(A6),D0
  18725.     CMP    n_period(A6),D0
  18726.     BLT    TonePortaSetPer
  18727.     MOVE    n_wantedperiod(A6),n_period(A6)
  18728.     CLR    n_wantedperiod(A6)
  18729.  
  18730. TonePortaSetPer
  18731.     MOVE    n_period(A6),D2
  18732.     MOVE.B    n_glissfunk(A6),D0
  18733.     AND.B    #$0F,D0
  18734.     BEQ    GlissSkip
  18735.     MOVEQ    #0,D0
  18736.     MOVE.B    n_finetune(A6),D0
  18737.     MULU    #37*2,D0
  18738.     LEA    PeriodTable(PC),A0
  18739.     ADD.L    D0,A0
  18740.     MOVEQ    #0,D0
  18741. GlissLoop
  18742.     CMP    (A0,D0.W),D2
  18743.     BHS    GlissFound
  18744.     ADDQ    #2,D0
  18745.     CMP    #37*2,D0
  18746.     BLO    GlissLoop
  18747.     MOVEQ    #35*2,D0
  18748. GlissFound
  18749.     MOVE    (A0,D0.W),D2
  18750. GlissSkip
  18751.     MOVE    D2,6(A5) ; Set period
  18752.     RTS
  18753.  
  18754. Vibrato    MOVE.B    n_cmdlo(A6),D0
  18755.     BEQ    Vibrato2
  18756.     MOVE.B    n_vibratocmd(A6),D2
  18757.     AND.B    #$0F,D0
  18758.     BEQ    vibskip
  18759.     AND.B    #$F0,D2
  18760.     OR.B    D0,D2
  18761. vibskip    MOVE.B    n_cmdlo(A6),D0
  18762.     AND.B    #$F0,D0
  18763.     BEQ    vibskip2
  18764.     AND.B    #$0F,D2
  18765.     OR.B    D0,D2
  18766. vibskip2
  18767.     MOVE.B    D2,n_vibratocmd(A6)
  18768. Vibrato2
  18769.     MOVE.L    A4,-(SP)
  18770.     MOVE.B    n_vibratopos(A6),D0
  18771.     LEA    VibratoTable(PC),A4
  18772.     LSR    #2,D0
  18773.     AND    #$001F,D0
  18774.     MOVEQ    #0,D2
  18775.     MOVE.B    n_wavecontrol(A6),D2
  18776.     AND.B    #$03,D2
  18777.     BEQ    vib_sine
  18778.     LSL.B    #3,D0
  18779.     CMP.B    #1,D2
  18780.     BEQ    vib_rampdown
  18781.     MOVE.B    #255,D2
  18782.     BRA    vib_set
  18783. vib_rampdown
  18784.     TST.B    n_vibratopos(A6)
  18785.     BPL    vib_rampdown2
  18786.     MOVE.B    #255,D2
  18787.     SUB.B    D0,D2
  18788.     BRA    vib_set
  18789. vib_rampdown2
  18790.     MOVE.B    D0,D2
  18791.     BRA    vib_set
  18792. vib_sine
  18793.     MOVE.B    0(A4,D0.W),D2
  18794. vib_set
  18795.     MOVE.B    n_vibratocmd(A6),D0
  18796.     AND    #15,D0
  18797.     MULU    D0,D2
  18798.     LSR    #7,D2
  18799.     MOVE    n_period(A6),D0
  18800.     TST.B    n_vibratopos(A6)
  18801.     BMI    VibratoNeg
  18802.     ADD    D2,D0
  18803.     BRA    Vibrato3
  18804. VibratoNeg
  18805.     SUB    D2,D0
  18806. Vibrato3
  18807.     MOVE    D0,6(A5)
  18808.     MOVE.B    n_vibratocmd(A6),D0
  18809.     LSR    #2,D0
  18810.     AND    #$003C,D0
  18811.     ADD.B    D0,n_vibratopos(A6)
  18812.     MOVE.L    (SP)+,A4
  18813.     RTS
  18814.  
  18815. TonePlusVolSlide
  18816.     BSR    TonePortNoChange
  18817.     BSR    VolumeSlide
  18818.     RTS
  18819.  
  18820. VibratoPlusVolSlide
  18821.     BSR    Vibrato2
  18822.     BSR    VolumeSlide
  18823.     RTS
  18824.  
  18825. Tremolo    MOVE.L    A4,-(SP)
  18826.     MOVE.B    n_cmdlo(A6),D0
  18827.     BEQ    Tremolo2
  18828.     MOVE.B    n_tremolocmd(A6),D2
  18829.     AND.B    #$0F,D0
  18830.     BEQ    treskip
  18831.     AND.B    #$F0,D2
  18832.     OR.B    D0,D2
  18833. treskip    MOVE.B    n_cmdlo(A6),D0
  18834.     AND.B    #$F0,D0
  18835.     BEQ    treskip2
  18836.     AND.B    #$0F,D2
  18837.     OR.B    D0,D2
  18838. treskip2
  18839.     MOVE.B    D2,n_tremolocmd(A6)
  18840. Tremolo2
  18841.     MOVE.B    n_tremolopos(A6),D0
  18842.     LEA    VibratoTable(PC),A4
  18843.     LSR    #2,D0
  18844.     AND    #$001F,D0
  18845.     MOVEQ    #0,D2
  18846.     MOVE.B    n_wavecontrol(A6),D2
  18847.     LSR.B    #4,D2
  18848.     AND.B    #$03,D2
  18849.     BEQ    tre_sine
  18850.     LSL.B    #3,D0
  18851.     CMP.B    #1,D2
  18852.     BEQ    tre_rampdown
  18853.     MOVE.B    #255,D2
  18854.     BRA    tre_set
  18855. tre_rampdown
  18856.     TST.B    n_vibratopos(A6)
  18857.     BPL    tre_rampdown2
  18858.     MOVE.B    #255,D2
  18859.     SUB.B    D0,D2
  18860.     BRA    tre_set
  18861. tre_rampdown2
  18862.     MOVE.B    D0,D2
  18863.     BRA    tre_set
  18864. tre_sine
  18865.     MOVE.B    0(A4,D0.W),D2
  18866. tre_set
  18867.     MOVE.B    n_tremolocmd(A6),D0
  18868.     AND    #15,D0
  18869.     MULU    D0,D2
  18870.     LSR    #6,D2
  18871.     MOVEQ    #0,D0
  18872.     MOVE.B    n_volume(A6),D0
  18873.     TST.B    n_tremolopos(A6)
  18874.     BMI    TremoloNeg
  18875.     ADD    D2,D0
  18876.     BRA    Tremolo3
  18877. TremoloNeg
  18878.     SUB    D2,D0
  18879. Tremolo3
  18880.     BPL    TremoloSkip
  18881.     CLR    D0
  18882. TremoloSkip
  18883.     CMP    #$40,D0
  18884.     BLS    TremoloOk
  18885.     MOVE    #$40,D0
  18886. TremoloOk
  18887.     MOVE    D0,8(A5)
  18888.     MOVE.B    n_tremolocmd(A6),D0
  18889.     LSR    #2,D0
  18890.     AND    #$003C,D0
  18891.     ADD.B    D0,n_tremolopos(A6)
  18892.     MOVE.L    (SP)+,A4
  18893.     ADDQ.L    #4,SP
  18894.     RTS
  18895.  
  18896. SampleOffset
  18897.     MOVEQ    #0,D0
  18898.     MOVE.B    n_cmdlo(A6),D0
  18899.     BEQ    sononew
  18900.     MOVE.B    D0,n_sampleoffset(A6)
  18901. sononew    MOVE.B    n_sampleoffset(A6),D0
  18902.     LSL    #7,D0
  18903.     CMP    n_length(A6),D0
  18904.     BGE    sofskip
  18905.     SUB    D0,n_length(A6)
  18906.     LSL    #1,D0
  18907.     ADD.L    D0,n_start(A6)
  18908.     RTS
  18909. sofskip MOVE    #$0001,n_length(A6)
  18910.     RTS
  18911.  
  18912. VolumeSlide
  18913.     MOVEQ    #0,D0
  18914.     MOVE.B    n_cmdlo(A6),D0
  18915.     LSR.B    #4,D0
  18916.     TST.B    D0
  18917.     BEQ    VolSlideDown
  18918. VolSlideUp
  18919.     ADD.B    D0,n_volume(A6)
  18920.     CMP.B    #$40,n_volume(A6)
  18921.     BMI    vsuskip
  18922.     MOVE.B    #$40,n_volume(A6)
  18923. vsuskip    MOVE.B    n_volume(A6),D0
  18924. ;    MOVE    D0,8(A5)
  18925.     RTS
  18926.  
  18927. VolSlideDown
  18928.     MOVEQ    #0,D0
  18929.     MOVE.B    n_cmdlo(A6),D0
  18930.     AND.B    #$0F,D0
  18931. VolSlideDown2
  18932.     SUB.B    D0,n_volume(A6)
  18933.     BPL    vsdskip
  18934.     CLR.B    n_volume(A6)
  18935. vsdskip    MOVE.B    n_volume(A6),D0
  18936. ;    MOVE    D0,8(A5)
  18937.     RTS
  18938.  
  18939. PositionJump
  18940.     MOVEQ    #0,D0
  18941.     MOVE.B    n_cmdlo(A6),D0
  18942.     SUBQ.B    #1,D0
  18943.     MOVE.L    D0,SongPosition
  18944. pj2    CLR.B    PBreakPosition
  18945.     ST     PosJumpAssert
  18946.     RTS
  18947.  
  18948. VolumeChange
  18949.     MOVEQ    #0,D0
  18950.     MOVE.B    n_cmdlo(A6),D0
  18951.     CMP.B    #$40,D0
  18952.     BLS    VolumeOk
  18953.     MOVEQ    #$40,D0
  18954. VolumeOk
  18955.     MOVE.B    D0,n_volume(A6)
  18956. ;    MOVE    D0,8(A5)
  18957.     RTS
  18958.  
  18959. PatternBreak
  18960.     MOVEQ    #0,D0
  18961.     MOVE.B    n_cmdlo(A6),D0
  18962.     MOVE.L    D0,D2
  18963.     LSR.B    #4,D0
  18964.     MULU    #10,D0
  18965.     AND.B    #$0F,D2
  18966.     ADD.B    D2,D0
  18967.     CMP.B    #63,D0
  18968.     BHI    pj2
  18969.     MOVE.B    D0,PBreakPosition
  18970.     ST    PosJumpAssert
  18971.     RTS
  18972.  
  18973. SetSpeed
  18974.     MOVE.B    3(A6),D0
  18975.     AND    #$FF,D0
  18976.     BEQ.S    SpeedNull
  18977.     TST.B    IntMode
  18978.     BEQ.S    normspd
  18979.     CMP    #32,D0
  18980.     BLO.S    normspd
  18981.     MOVE    D0,RealTempo
  18982.     MOVEM.L    D0-D7/A0-A6,-(SP)
  18983.     MOVE    SamScrEnable,-(SP)
  18984.     ST    SamScrEnable
  18985.     ST    UpdateTempo
  18986.     JSR    SetTempo
  18987.     MOVE    (SP)+,SamScrEnable
  18988.     MOVEM.L    (SP)+,D0-D7/A0-A6
  18989.     RTS
  18990. normspd    CLR.L    Counter
  18991.     MOVE    D0,CurrSpeed+2
  18992.     RTS
  18993. SpeedNull
  18994.     CLR.L    RunMode
  18995.     JSR    SetNormalPtrCol
  18996.     RTS
  18997.  
  18998.  
  18999. CheckMoreEffects
  19000.     MOVE.B    2(A6),D0
  19001.     AND.B    #$0F,D0
  19002.     CMP.B    #$9,D0
  19003.     BEQ    SampleOffset
  19004.     CMP.B    #$B,D0
  19005.     BEQ    PositionJump
  19006.     CMP.B    #$D,D0
  19007.     BEQ    PatternBreak
  19008.     CMP.B    #$E,D0
  19009.     BEQ    E_Commands
  19010.     CMP.B    #$F,D0
  19011.     BEQ    SetSpeed
  19012.     TST    (A4)
  19013.     BEQ    Return2
  19014.     CMP.B    #$C,D0
  19015.     BEQ    VolumeChange
  19016.     BRA    PerNop
  19017.  
  19018. E_Commands
  19019.     MOVE.B    n_cmdlo(A6),D0
  19020.     AND.B    #$F0,D0
  19021.     LSR.B    #4,D0
  19022.     BEQ    FilterOnOff
  19023.     CMP.B    #1,D0
  19024.     BEQ    FinePortaUp
  19025.     CMP.B    #2,D0
  19026.     BEQ    FinePortaDown
  19027.     CMP.B    #3,D0
  19028.     BEQ    SetGlissControl
  19029.     CMP.B    #4,D0
  19030.     BEQ    SetVibratoControl
  19031.     CMP.B    #5,D0
  19032.     BEQ    SetFineTune
  19033.     CMP.B    #6,D0
  19034.     BEQ    JumpLoop
  19035.     CMP.B    #7,D0
  19036.     BEQ    SetTremoloControl
  19037.     CMP.B    #8,D0
  19038.     BEQ    KarplusStrong
  19039.     CMP.B    #$E,D0
  19040.     BEQ    PatternDelay
  19041.     TST    (A4)
  19042.     BEQ    Return2
  19043.     CMP.B    #9,D0
  19044.     BEQ    RetrigNote
  19045.     CMP.B    #$A,D0
  19046.     BEQ    VolumeFineUp
  19047.     CMP.B    #$B,D0
  19048.     BEQ    VolumeFineDown
  19049.     CMP.B    #$C,D0
  19050.     BEQ    NoteCut
  19051.     CMP.B    #$D,D0
  19052.     BEQ    NoteDelay
  19053.     CMP.B    #$F,D0
  19054.     BEQ    FunkIt
  19055.     RTS
  19056.  
  19057. FilterOnOff
  19058.     MOVE.B    n_cmdlo(A6),D0
  19059.     AND.B    #1,D0
  19060.     ASL.B    #1,D0
  19061.     AND.B    #$FD,$BFE001
  19062.     OR.B    D0,$BFE001
  19063.     RTS
  19064.  
  19065. SetGlissControl
  19066.     MOVE.B    n_cmdlo(A6),D0
  19067.     AND.B    #$0F,D0
  19068.     AND.B    #$F0,n_glissfunk(A6)
  19069.     OR.B    D0,n_glissfunk(A6)
  19070.     RTS
  19071.  
  19072. SetVibratoControl
  19073.     MOVE.B    n_cmdlo(A6),D0
  19074.     AND.B    #$0F,D0
  19075.     AND.B    #$F0,n_wavecontrol(A6)
  19076.     OR.B    D0,n_wavecontrol(A6)
  19077.     RTS
  19078.  
  19079. SetFineTune
  19080.     MOVE.B    n_cmdlo(A6),D0
  19081.     AND.B    #$0F,D0
  19082.     MOVE.B    D0,n_finetune(A6)
  19083.     RTS
  19084.  
  19085. JumpLoop
  19086.     TST.L    Counter
  19087.     BNE    Return2
  19088.     MOVE.B    n_cmdlo(A6),D0
  19089.     AND.B    #$0F,D0
  19090.     BEQ    SetLoop
  19091.     TST.B    n_loopcount(A6)
  19092.     BEQ    jumpcnt
  19093.     SUB.B    #1,n_loopcount(A6)
  19094.     BEQ    Return2
  19095. jmploop    MOVE.B    n_pattpos(A6),PBreakPosition
  19096.     ST    PBreakFlag
  19097.     RTS
  19098.  
  19099. jumpcnt    MOVE.B    D0,n_loopcount(A6)
  19100.     BRA    jmploop
  19101.  
  19102. SetLoop    MOVE.L    PatternPosition,D0
  19103.     LSR.L    #4,D0
  19104.     AND.B    #63,D0
  19105.     MOVE.B    D0,n_pattpos(A6)
  19106.     RTS
  19107.  
  19108. SetTremoloControl
  19109.     MOVE.B    n_cmdlo(A6),D0
  19110.     AND.B    #$0F,D0
  19111.     LSL.B    #4,D0
  19112.     AND.B    #$0F,n_wavecontrol(A6)
  19113.     OR.B    D0,n_wavecontrol(A6)
  19114.     RTS
  19115.  
  19116. KarplusStrong
  19117.     MOVEM.L    D1-D2/A0-A1,-(SP)
  19118.     MOVE.L    n_loopstart(A6),A0
  19119.     MOVE.L    A0,A1
  19120.     MOVE    n_replen(A6),D0
  19121.     ADD    D0,D0
  19122.     SUBQ    #2,D0
  19123. karplop    MOVE.B    (A0),D1
  19124.     EXT    D1
  19125.     MOVE.B    1(A0),D2
  19126.     EXT    D2
  19127.     ADD    D1,D2
  19128.     ASR    #1,D2
  19129.     MOVE.B    D2,(A0)+
  19130.     DBF    D0,karplop
  19131.     MOVE.B    (A0),D1
  19132.     EXT    D1
  19133.     MOVE.B    (A1),D2
  19134.     EXT    D2
  19135.     ADD    D1,D2
  19136.     ASR    #1,D2
  19137.     MOVE.B    D2,(A0)
  19138.     MOVEM.L    (SP)+,D1-D2/A0-A1
  19139.     RTS
  19140.  
  19141. RetrigNote
  19142.     MOVE.L    D1,-(SP)
  19143.     MOVEQ    #0,D0
  19144.     MOVE.B    n_cmdlo(A6),D0
  19145.     AND.B    #$0F,D0
  19146.     BEQ    rtnend
  19147.     MOVE.L    Counter,D1
  19148.     BNE    rtnskp
  19149.     MOVE    n_note(A6),D1
  19150.     AND    #$0FFF,D1
  19151.     BNE    rtnend
  19152.     MOVE.L    Counter,D1
  19153. rtnskp    DIVU    D0,D1
  19154.     SWAP    D1
  19155.     TST    D1
  19156.     BNE    rtnend
  19157. DoRetrg    MOVE    n_dmabit(A6),$DFF096    ; Channel DMA off
  19158.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  19159.     MOVE    n_length(A6),4(A5)    ; Set length
  19160.     MOVE    n_period(A6),6(A5)
  19161.     MOVEQ    #0,D0
  19162.     MOVE.B    n_volume(A6),D0
  19163. ;    MOVE    D0,8(A5)
  19164.     JSR    DMAWaitLoop
  19165.     MOVE    n_dmabit(A6),D0
  19166.     BSET    #15,D0
  19167.     MOVE    D0,$DFF096
  19168.     JSR    DMAWaitLoop
  19169.     MOVE.L    n_loopstart(A6),(A5)
  19170.     MOVE.L    n_replen(A6),4(A5)
  19171. rtnend    MOVE.L    (SP)+,D1
  19172.     RTS
  19173.  
  19174. VolumeFineUp
  19175.     TST.L    Counter
  19176.     BNE    Return2
  19177.     MOVEQ    #0,D0
  19178.     MOVE.B    n_cmdlo(A6),D0
  19179.     AND.B    #$F,D0
  19180.     BRA    VolSlideUp
  19181.  
  19182. VolumeFineDown
  19183.     TST.L    Counter
  19184.     BNE    Return2
  19185.     MOVEQ    #0,D0
  19186.     MOVE.B    n_cmdlo(A6),D0
  19187.     AND.B    #$0F,D0
  19188.     BRA    VolSlideDown2
  19189.  
  19190. NoteCut    MOVEQ    #0,D0
  19191.     MOVE.B    n_cmdlo(A6),D0
  19192.     AND.B    #$0F,D0
  19193.     CMP.L    Counter,D0
  19194.     BNE    Return2
  19195.     CLR.B    n_volume(A6)
  19196. ;    MOVE    #0,8(A5)
  19197.     RTS
  19198.  
  19199. NoteDelay
  19200.     MOVEQ    #0,D0
  19201.     MOVE.B    n_cmdlo(A6),D0
  19202.     AND.B    #$0F,D0
  19203.     CMP.L    Counter,D0
  19204.     BNE    Return2
  19205.     MOVE    (A6),D0
  19206.     AND    #$0FFF,D0
  19207.     BEQ    Return2
  19208.     MOVE.L    D1,-(SP)
  19209.     BRA    DoRetrg
  19210.  
  19211. PatternDelay
  19212.     TST.L    Counter
  19213.     BNE    Return2
  19214.     MOVEQ    #0,D0
  19215.     MOVE.B    n_cmdlo(A6),D0
  19216.     AND.B    #$0F,D0
  19217.     TST.B    PattDelayTime2
  19218.     BNE    Return2
  19219.     ADDQ.B    #1,D0
  19220.     MOVE.B    D0,PattDelayTime
  19221.     RTS
  19222.  
  19223. FunkIt    TST.L    Counter
  19224.     BNE    Return2
  19225.     MOVE.B    n_cmdlo(A6),D0
  19226.     AND.B    #$0F,D0
  19227.     LSL.B    #4,D0
  19228.     AND.B    #$0F,n_glissfunk(A6)
  19229.     OR.B    D0,n_glissfunk(A6)
  19230.     TST.B    D0
  19231.     BEQ    Return2
  19232. UpdateFunk
  19233.     MOVEM.L    A0/D1,-(SP)
  19234.     MOVEQ    #0,D0
  19235.     MOVE.B    n_glissfunk(A6),D0
  19236.     LSR.B    #4,D0
  19237.     BEQ    funkend
  19238.     LEA    FunkTable(PC),A0
  19239.     MOVE.B    (A0,D0.W),D0
  19240.     ADD.B    D0,n_funkoffset(A6)
  19241.     BTST    #7,n_funkoffset(A6)
  19242.     BEQ    funkend
  19243.     CLR.B    n_funkoffset(A6)
  19244.     MOVE.L    n_loopstart(A6),D0
  19245.     MOVEQ    #0,D1
  19246.     MOVE    n_replen(A6),D1
  19247.     ADD.L    D1,D0
  19248.     ADD.L    D1,D0
  19249.     MOVE.L    n_wavestart(A6),A0
  19250.     ADDQ.L    #1,A0
  19251.     CMP.L    D0,A0
  19252.     BLO.S    funkok
  19253.     MOVE.L    n_loopstart(A6),A0
  19254. funkok    MOVE.L    A0,n_wavestart(A6)
  19255.     MOVEQ    #-1,D0
  19256.     SUB.B    (A0),D0
  19257.     MOVE.B    D0,(A0)
  19258. funkend    MOVEM.L    (SP)+,A0/D1
  19259.     RTS
  19260.  
  19261.  
  19262. ;----------------------------------------------
  19263. ; copy image data (assuming source modulo=0)
  19264. ; A0...source
  19265. ; A1...destin
  19266. ; D0...Ysize in lines
  19267. ; D1...Source Xsize in bytes
  19268. CopyImageToScreen
  19269.         MOVEM.L    D2-4,-(SP)
  19270.         LEA    BitPlaneData+TopMenusPos,A0
  19271.         LEA    TopMenusBuffer,A1
  19272.         MOVE    #ScreenWidth,D3
  19273.         MOVE    D3,D2
  19274.         MULU    #ScreenHeight,D2
  19275.         SUB    D1,D3
  19276.         MOVE    D0,D4
  19277.         MULU    D1,D4
  19278.         MOVE    D0,D7
  19279. .Yloop            MOVE    D1,D6
  19280. .Xloop                MOVE.B    (A0,D4.w),(A1,D2.w)
  19281.                 MOVE.B    (A0)+,(A1)+
  19282.             SUBQ    #1,D6
  19283.             BNE.S    .Xloop
  19284.         LEA    (A1,D3.w),A1
  19285.         SUBQ    #1,D7
  19286.         BNE.S    .Yloop
  19287.         MOVEM.L    (SP)+,D2-4
  19288.         RTS
  19289.  
  19290.  
  19291. ;----------------------------------------------
  19292. ; copy image data (assuming destin modulo = 0)
  19293. ; A0...source
  19294. ; A1...destin
  19295. ; D0...Ysize in lines
  19296. ; D1...Source Xsize in bytes
  19297. CopyScreenToBuf
  19298.         MOVEM.L    D2-4,-(SP)
  19299.         LEA    BitPlaneData+TopMenusPos,A0
  19300.         LEA    TopMenusBuffer,A1
  19301.         MOVE    #ScreenWidth,D3
  19302.         MOVE    D3,D2
  19303.         MULU    #ScreenHeight,D2
  19304.         SUB    D1,D3
  19305.         MOVE    D0,D4
  19306.         MULU    D1,D4
  19307.         MOVE    D0,D7
  19308. .Yloop            MOVE    D1,D6
  19309. .Xloop                MOVE.B    (A0,D2.w),(A1,D4.w)
  19310.                 MOVE.B    (A0)+,(A1)+
  19311.             SUBQ    #1,D6
  19312.             BNE.S    .Xloop
  19313.         LEA    (A0,D3.w),A0
  19314.         SUBQ    #1,D7
  19315.         BNE.S    .Yloop
  19316.         MOVEM.L    (SP)+,D2-4
  19317.         RTS
  19318.  
  19319.  
  19320. ;************************* End of Code ******************************
  19321.  
  19322. FunkTable
  19323.         dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  19324.  
  19325. VibratoTable
  19326.         dc.b      0, 24, 49, 74, 97,120,141,161
  19327.         dc.b    180,197,212,224,235,244,250,253
  19328.         dc.b    255,253,250,244,235,224,212,197
  19329.         dc.b    180,161,141,120, 97, 74, 49, 24
  19330.  
  19331. AllRightText    dc.b    'All right',0
  19332. PLSTFullText    dc.b    'Plst is full!',0
  19333. AreYouSureText    dc.b    'Are you sure?',0
  19334. NoDiskInDriveText
  19335.         dc.b    'No disk in df0!',0
  19336. WriteProtectedText
  19337.         dc.b    'Write protected',0
  19338. OprAbortedText    dc.b    'Print aborted!',0
  19339. EnterDataText    dc.b    'Enter data',0
  19340. AddingPathText    dc.b    'Adding path...',0
  19341. DiskErrorText    dc.b    'Disk error !!',0
  19342. LoadingText    dc.b    'Loading...',0
  19343. LoadingSongText    dc.b    'Loading song',0
  19344. LoadingModuleText
  19345.         dc.b    'Loading module',0
  19346. LoadingSampleText
  19347.         dc.b    'Loading sample',0
  19348. SavingText    dc.b    'Saving...',0
  19349. ;SaveSongText    dc.b    'Save song ?',0
  19350. SavingSongText    dc.b    'Saving song',0
  19351. ;SaveModuleText    dc.b    'Save module ?',0
  19352. SavingModuleText
  19353.         dc.b    'Saving module',0
  19354. ;SaveSampleText    dc.b    'Save sample ?',0
  19355. SavingSampleText
  19356.         dc.b    'Saving sample',0
  19357. LoadingPLSTText    dc.b    'Loading plst',0
  19358. SavingPLSTText    dc.b    'Saving plst',0
  19359. DeletingSongText
  19360.         dc.b    'Deleting song',0
  19361. DeletingModuleText
  19362.         dc.b    'Deleting module',0
  19363. DeletingSampleText
  19364.         dc.b    'Deleting sample',0
  19365. RenamingFileText
  19366.         dc.b    'Renaming file',0
  19367. DecrunchingText    dc.b    'Decrunching...',0
  19368. CrunchingText    dc.b    'Crunching...',0
  19369. SelectEntryText    dc.b    'Select entry',0
  19370. SelectSongText    dc.b    'Select song',0
  19371. SelectModuleText
  19372.         dc.b    'Select module',0
  19373. SelectSampleText
  19374.         dc.b    'Select sample',0
  19375. SelectFileText    dc.b    'Select file',0
  19376. ReadingDirText    dc.b    'Reading dir...',0
  19377. PosSetText    dc.b    'Position set',0
  19378. PrintingSongText
  19379.         dc.b    'Printing song',0
  19380. PrintingPLSTText
  19381.         dc.b    'Printing plst',0
  19382.  
  19383. SaveSongText    dc.b    'Save song ?',0
  19384. DeleteSongText    dc.b    'Delete song ?',0
  19385. SaveModuleText    dc.b    'Save module ?',0
  19386. DeleteModuleText dc.b    'Delete module ?',0
  19387. SaveSampleText    dc.b    'Save sample ?',0
  19388. DeleteSampleText dc.b    'Delete sample ?',0
  19389. PrintPLSTText    dc.b    'Print plst ?',0
  19390. PrintSongText    dc.b    'Print song ?',0
  19391. QuitPTText    dc.b    'Really quit ?',0
  19392. UpsampleText    dc.b    'Upsample ?',0
  19393. DownSampleText    dc.b    'Downsample ?',0
  19394. PleaseSelectText dc.b    'Please select',0
  19395. ClearSplitText    dc.b    'Clear split ?',0
  19396. ResetAllText    dc.b    'Reset config ?',0
  19397. DeletePresetText dc.b    'Delete preset ?',0
  19398. LoadPLSTText    dc.b    'Load presetlist?',0
  19399. SavePLSTText    dc.b    'Save presetlist?',0
  19400. KillSampleText    dc.b    'Kill sample ?',0
  19401. AbortLoadText    dc.b    'Abort loading ?',0
  19402. LoadConfigText    dc.b    'Load config ?',0
  19403. SaveConfigText    dc.b    'Save config ?',0
  19404.  
  19405. DiskFormatText    dc.b    'Disk format'
  19406. InProgressText    dc.b    'in progress'
  19407. FormattingCylText
  19408.         dc.b    'Formatting cyl ',0
  19409. VerifyingText    dc.b    'Verifying  cyl ',0
  19410. InitDiskText    dc.b    'Initializing',0
  19411. PlsEntNamText    dc.b    'Please enter name'
  19412. OfVolumeText    dc.b    'of volume:  ST-__',0,0
  19413.     cnop 0,2
  19414. DiskNumText1    dc.b    '0'
  19415. DiskNumText2    dc.b    '0  '
  19416. PEdDefaultPath    dc.b    'SYS:',0
  19417.         dcb.b    47,0
  19418.  
  19419. PEdDefaultVol    dc.b    'st-'
  19420. SndDiskNum0    dc.b    '0'
  19421. SndDiskNum1    dc.b    '1:'
  19422.  
  19423. PresetName    dc.b    '      '
  19424. PsetNameText    dc.b    '                '
  19425.         dc.b    ' '
  19426. PsetVolText    dc.b    '  '
  19427.         dc.b    ' '
  19428. PsetLenText    dc.b    '    '
  19429.         dc.b    ' '
  19430. PsetRepeatText    dc.b    '    '
  19431.         dc.b    ' '
  19432. PsetReplenText    dc.b    '    '
  19433.  
  19434. InsertPsetText    dc.b    'ST-01:                  0 0000 0000 0002'
  19435. PsetPLSTtext    dc.b    'No.    Samplename               '
  19436.         dc.b    'Length  Repeat  RepLen',$A,$A
  19437. PsetPrtNumText    dc.b    '    :  '
  19438. PsetPrtNameText    dc.b    '                             '
  19439. PsetPrtLenText    dc.b    '        '
  19440. PsetPrtRepeatText    dc.b    '        '
  19441. PsetPrtRepLenText    dc.b    10
  19442.     dc.b    0
  19443. SongDumpText
  19444.     dc.b    9
  19445.     dc.b    'Protracker Song-Dump -- Made with '
  19446.     dc.b    'Protracker V1.2   ',$D,$A,$A
  19447.     dc.b    9
  19448.     dc.b    'Songname:  '
  19449. CRLF_Text    dc.b    13,10
  19450. FF_Text        dc.b    12,0
  19451.  
  19452.     cnop 0,2
  19453. PatternNumText    dc.b    9,9,9,'Pattern: '
  19454. PattNumText1    dc.b    '0'
  19455. PattNumText2    dc.b    '0',$D,$A,$D,$A
  19456.  
  19457. PtotText    dc.b    9
  19458. PattXText1    dc.b    "0"
  19459. PattXText2    dc.b    "0 : "
  19460. PpText        dc.b    "                      "
  19461. Prafs        dc.b    "  0000  0000  0000    ",$D,$A
  19462. PnText2        dc.b    "        "
  19463.     cnop 0,2
  19464.         dc.b    0
  19465. PattPosText    dc.b    '00  :                                                       '
  19466. PnText        dc.b    '    ',0
  19467.  
  19468.     cnop 0,2
  19469. FmtSongDirName        dc.b    'SYS:songs',0
  19470. FmtModuleDirName    dc.b    'SYS:modules',0
  19471.  
  19472.     cnop 0,2
  19473. STText1        dc.b    'ST'
  19474. STText1Num    dc.b    '-'
  19475. STText1Number    dc.b    0,0,':'
  19476. STText2        dc.b    'ST'
  19477. STText2Num    dc.b    '-'
  19478. STText2Number    dc.b    0,0,':'
  19479. STText3        dc.b    'ST'
  19480. STText3Num    dc.b    '-'
  19481. STText3Number    dc.b    0,0,':'
  19482. STText4        dc.b    'ST'
  19483. STText4Num    dc.b    '-'
  19484. STText4Number    dc.b    0,0,':'
  19485.  
  19486. EmptyLineText    dc.b    '                       ',0
  19487.  
  19488. FastHexTable    dc.b    '000102030405060708090A0B0C0D0E0F'
  19489.         dc.b    '101112131415161718191A1B1C1D1E1F'
  19490.         dc.b    '202122232425262728292A2B2C2D2E2F'
  19491.         dc.b    '303132333435363738393A3B3C3D3E3F'
  19492.         dc.b    '404142434445464748494A4B4C4D4E4F'
  19493.         dc.b    '505152535455565758595A5B5C5D5E5F'
  19494.         dc.b    '606162636465666768696A6B6C6D6E6F'
  19495.         dc.b    '707172737475767778797A7B7C7D7E7F'
  19496.         dc.b    '808182838485868788898A8B8C8D8E8F'
  19497.         dc.b    '909192939495969798999A9B9C9D9E9F'
  19498.         dc.b    'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'
  19499.         dc.b    'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'
  19500.         dc.b    'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF'
  19501.         dc.b    'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'
  19502.         dc.b    'E0E1E2E3E4E5E6E7E8E9EAEBECEdEEEF'
  19503.         dc.b    'F0F1F2F3F4F5F6F7F8F9FAFBFCFdFEFF'
  19504.  
  19505. TrackdiskName    dc.b    'trackdisk.device',0
  19506. InputDevName    dc.b    'input.device',0
  19507. DOSBase        dc.l    0
  19508. IntuitionBase    dc.l    0
  19509. GfxBase        dc.l    0
  19510.  
  19511. RawKeyHexTable
  19512.     dc.b    10,1,2,3,4,5,6,7
  19513.     dc.b    8,9,32,53,51,34,18,35
  19514. RawKeyScaleTable
  19515.     dc.b    49,33,50,34,51,52,36,53,37,54,38,55,56,40,57
  19516.     dc.b    41,58,16,2,17,3,18,19,5,20,6,21,7,22,23,9,24,10
  19517.     dc.b    25,26,12,27,70,70,0
  19518.  
  19519. KbdTransTable1
  19520.     dc.b     0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16
  19521.     dc.b    12,13,14,15,16,17,18,19,20,21,22,23
  19522.     dc.b    24,25,26,27,28,29,30,31,36,36
  19523. KbdTransTable2
  19524.     dc.b    12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
  19525.     dc.b    24,25,26,27,28,29,30,31,32,33,34,35
  19526.     dc.b    36,36,36,36,36,36,36,36,36,36
  19527. NoteNames1
  19528.     dc.b    'C-1 C#1 D-1 D#1 E-1 F-1 F#1 G-1 G#1 A-1 A#1 B-1 '
  19529.     dc.b    'C-2 C#2 D-2 D#2 E-2 F-2 F#2 G-2 G#2 A-2 A#2 B-2 '
  19530.     dc.b    'C-3 C#3 D-3 D#3 E-3 F-3 F#3 G-3 G#3 A-3 A#3 B-3 '
  19531. SpcNoteText
  19532.     dc.b    '--- '
  19533. NoteNames2
  19534.     dc.b    'C-1 D¡1 D-1 E¡1 E-1 F-1 G¡1 G-1 A¡1 A-1 B¡1 B-1 '
  19535.     dc.b    'C-2 D¡2 D-2 E¡2 E-2 F-2 G¡2 G-2 A¡2 A-2 B¡2 B-2 '
  19536.     dc.b    'C-3 D¡3 D-3 E¡3 E-3 F-3 G¡3 G-3 A¡3 A-3 B¡3 B-3 '
  19537.     dc.b    '--- '
  19538.  
  19539. PeriodTable
  19540. ; Tuning 0
  19541.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  19542.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  19543.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113,0
  19544. ; Tuning 1
  19545.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  19546.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  19547.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113,0
  19548. ; Tuning 2
  19549.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  19550.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  19551.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112,0
  19552. ; Tuning 3
  19553.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  19554.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  19555.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111,0
  19556. ; Tuning 4
  19557.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  19558.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  19559.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110,0
  19560. ; Tuning 5
  19561.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  19562.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  19563.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109,0
  19564. ; Tuning 6
  19565.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  19566.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  19567.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109,0
  19568. ; Tuning 7
  19569.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  19570.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  19571.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108,0
  19572. ; Tuning -8
  19573.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  19574.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  19575.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120,0
  19576. ; Tuning -7
  19577.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  19578.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  19579.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119,0
  19580. ; Tuning -6
  19581.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  19582.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  19583.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118,0
  19584. ; Tuning -5
  19585.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  19586.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  19587.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118,0
  19588. ; Tuning -4
  19589.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  19590.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  19591.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117,0
  19592. ; Tuning -3
  19593.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  19594.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  19595.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116,0
  19596. ; Tuning -2
  19597.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  19598.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  19599.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115,0
  19600. ; Tuning -1
  19601.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  19602.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  19603.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114,0
  19604.  
  19605. CursorPosTable
  19606.     dc.b    3,6,7,8,9,10,12
  19607.     dc.b    15,16,17,18,19,21
  19608.     dc.b    24,25,26,27,28,30
  19609.     dc.b    33,34,35,36,37
  19610. UnshiftedKeymap
  19611.     dc.b    '`1234567890-=\*0'
  19612.     dc.b    'qwertyuiop[]*123'
  19613.     dc.b    'asdfghjkl;',39,'#',0,'456'
  19614.     dc.b    '<zxcvbnm,./',0,'.','789 '
  19615. ShiftedKeymap
  19616.     dc.b    '~!@#$%^&*()_+|*0'
  19617.     dc.b    'qwertyuiop{}*123'
  19618.     dc.b    'asdfghjkl:',34,'^',0,'456'
  19619.     dc.b    '>zxcvbnm<>?',0,'.','789 '
  19620.  
  19621. SongNumOfPatt    dc.w    1
  19622. NoteNamesPtr    dc.l    0
  19623. SpritePtrsPtr    dc.l    0
  19624. LineCurPosPtr    dc.l    0
  19625. NoSpritePtr    dc.l    0
  19626. CursorPosPtr    dc.l    0
  19627. Ch1SpritePtr    dc.l    0
  19628. Ch2SpritePtr    dc.l    0
  19629. Ch3SpritePtr    dc.l    0
  19630. Ch4SpritePtr    dc.l    0
  19631. PPattPos    dc.l    0
  19632. SaveEditMode    dc.l    0
  19633. EditMode    dc.l    0
  19634. RunMode        dc.l    0
  19635. CurrCmds    dc.l    0
  19636. TextBplPtr    dc.l    0
  19637. TextOffset    dc.w    0
  19638. TextLength    dc.w    0
  19639. TextLenTemp    dc.l    0
  19640. ShowTextPtr    dc.l    0
  19641. PatternNumber    dc.l    0
  19642. CurrPos        dc.l    0
  19643. CurrSpeed    dc.l    0
  19644. KeyTransTabPtr    dc.l    0
  19645. CmdOffset    dc.w    0
  19646. RawKeyCode    dc.b    0
  19647. PattRfsh    dc.b    0
  19648. MountFlag    dc.w    0
  19649. GetLineFlag    dc.w    0
  19650. LoadInProgress    dc.w    0
  19651. KbIntSave    dc.l    0
  19652. KbIntSavePtr    dc.l    0
  19653. CurrentPlayNote    dc.w    214
  19654. LineCurX    dc.w    0
  19655. LineCurY    dc.w    0
  19656. TextEndPtr    dc.l    0
  19657. ScrPattPos    dc.w    0
  19658. PattCurPos    dc.w    0
  19659. GadgRepeat    dc.w    0
  19660. WordNumber    dc.w    0
  19661. HighPattNum    dc.w    0
  19662. InsNum        dc.w    0
  19663. LastInsNum    dc.w    1
  19664. PlayInsNum    dc.w    1
  19665. HiLowInstr    dc.w    0
  19666. PEDPos        dc.w    0
  19667. PLSTpos        dc.w    0
  19668. MaxPLSTOffset    dc.l    0
  19669. PresetMarkTotal    dc.w    0
  19670. PLSTOffset    dcb.b    14*4,0
  19671. CurrentPreset    dc.w    1
  19672. UpOrDown    dc.w    0
  19673. Joy0Low        dc.w    0
  19674. Joy0High    dc.w    0
  19675. MouseX    dc.w    0
  19676. MouseY    dc.w    0
  19677. MouseX2    dc.w    0
  19678. MouseY2    dc.w    0
  19679. MouseX3    dc.w    0
  19680. MouseY3    dc.w    0
  19681. DecompMemPtr    dc.l    0
  19682. DecompMemSize    dc.l    0
  19683.  
  19684. SampleInfo    dc.w    0
  19685. si_volume    dc.w    0
  19686. si_long        dc.l    0
  19687. si_pointer    dc.l    0,0,0,0,0
  19688. SampleInfo2    dc.w    0
  19689. si_volume2    dc.w    0
  19690. si_long2    dc.l    0
  19691. si_pointer2    dc.l    0,0,0,0,0
  19692.  
  19693. LongFFFF    dc.l    0
  19694. PosJumpAssert    dc.b    0
  19695. PBreakPosition    dc.b    0
  19696. PBreakFlag    dc.b    0
  19697. LEDStatus    dc.b    0
  19698. PattDelayTime    dc.b    0
  19699. PattDelayTime2    dc.b    0
  19700. PattRfshNum    dc.l    0
  19701. DidQuantize    dc.w    0
  19702. MessagePtr    dc.l    0
  19703. FileNamePtr    dc.l    0
  19704. DiskDataPtr    dc.l    0
  19705. FileHandle    dc.l    0
  19706. DiskDataLength    dc.l    0
  19707. LowMask        dc.b    $FF
  19708. PatternPosition    dc.l    0
  19709. SongPosition    dc.l    0
  19710. Counter        dc.l    0
  19711. PatternPtr    dc.l    0
  19712. SongDataPtr    dc.l    0
  19713. SampleStarts    dcb.l    31,0
  19714. SamplePtrs    EQU    SampleStarts-4
  19715. SampleLengths    dcb.l    32,0
  19716. DMACONtemp    dc.w    0
  19717. StackSave    dc.l    0
  19718. InputDevMouse    dc.l    0,0,0
  19719. AnalyzerHeights    dcb.w    23,0
  19720. AnalyzerOpplegg    dcb.w    23,0
  19721. Action        dc.w    0
  19722. PathPtr        dc.l    0
  19723. FileLock    dc.l    0
  19724. CurrScreen    dc.w    0
  19725. SaveCurrScreen    dc.w    0
  19726. PointerCol1Save    dc.w    0
  19727. PointerCol2Save    dc.w    0
  19728. PointerCol3Save    dc.w    0
  19729. GetDecTemp    dc.b    0
  19730. UpdateTempo    dc.b    0
  19731. MoreInstrFlag    dc.w    0
  19732. SampleSortList    dcb.l    32,0
  19733. PLSTmem        dc.l    0
  19734. PresetTotal    dc.w    0
  19735. SaveScope    dc.b    0
  19736.         dc.b    0 ;free 0
  19737. DisableAnalyzer    dc.b    0
  19738. SaveDA        dc.b    0
  19739. AutoReqRunning    dc.b    0
  19740. NoSampleInfo    dc.b    0
  19741. FormatDataPtr    dc.l    0
  19742. CylinderNumber    dc.w    0
  19743. TrackdiskPort    dc.l    0,0,0,0
  19744. ProcessPtr    dc.l    0,0,0,0
  19745. DateStamp    dc.l    0,0,0,0
  19746. EnterTextFlag    dc.w    0
  19747. PresetLength    dc.w    0
  19748. PresetFineTune    dc.w    0
  19749. PresetRepeat    dc.w    0
  19750. PresetReplen    dc.w    0
  19751. PED_Action    dc.w    0
  19752. PsetNumTemp    dc.w    0
  19753. PsetPtrTemp    dc.l    0
  19754. FreeDiskSpace    dc.l    0
  19755. SplitAddress    dc.l    0
  19756. LaHeTx        dc.l    $12345678
  19757. PLSTAllocSize    dc.l    0
  19758. MaxPLSTEntries2    dc.w    0
  19759.  
  19760. ;---- Setup Data ----
  19761.  
  19762. DefaultSetupData
  19763.             dc.b    'PT1.2 Configuration File',$A,0
  19764. DefaultSongsPath
  19765.     dc.b    'ST-00:songs'
  19766.     dcb.b    21,0
  19767.     dc.b    'ST-00:modules'
  19768.     dcb.b    19,0
  19769.     dc.b    'DF0:'
  19770.     dcb.b    28,0
  19771.     dc.b    'PRT:'
  19772.     dcb.b    28,0
  19773. DefCol    dc.w    $000,$efe,$999,$445,$4c7,$b03,$000,$299
  19774.     dc.b    1   ; Song Pack Mode
  19775.     dc.b    0   ; Module Pack Mode
  19776.     dc.b    0   ; Split  0=off, 1=on
  19777.     dc.b    0   ; Filter
  19778.     dc.b    0   ; TransDel
  19779.     dc.b    1   ; ShowDec
  19780.     dc.b    1   ; AutoDir
  19781.     dc.b    1   ; AutoExit
  19782.     dc.b    1   ; ModOnly
  19783.     dc.b    0   ; MIDI
  19784.     dc.b    1,$18,$18,0        ; SplitData
  19785.     dc.b    2,$1A,$18,0
  19786.     dc.b    3,$1C,$18,0
  19787.     dc.b    4,$1D,$18,0
  19788.     dc.w    20,2            ; KeyRepDelay/Speed
  19789.     dc.b    0            ; Accidental
  19790.     dc.b    0            ; not in use
  19791.     dc.b    'newshell',0        ; ExtCmd 0
  19792.     dcb.b    23,0
  19793.     dc.b    'DevPak',0        ; ExtCmd 1
  19794.     dcb.b    25,0
  19795.     dc.b    'info',0        ; ExtCmd 2
  19796.     dcb.b    27,0
  19797.     dc.b    'list',0        ; ExtCmd 3
  19798.     dcb.b    27,0
  19799.     dc.b    'loadwb -debug',0    ; ExtCmd 4
  19800.     dcb.b    18,0
  19801.     dc.b    'diskmaster2.0',0    ; ExtCmd 5
  19802.     dcb.b    18,0
  19803.     dc.b    'run AudioMasterIII',0    ; ExtCmd 6
  19804.     dcb.b    13,0
  19805.     dc.b    'ced',0            ; ExtCmd 7
  19806.     dcb.b    28,0
  19807.     dc.w    0            ; Not in use
  19808. DefaultMaxPLSTEntries
  19809.     dc.w    2500            ; Max PLST Entries
  19810.     dc.b    2,3,4,1            ; Multi Mode Next
  19811.     dc.w    $102,$202,$037,$047,$304, $F06,$C10,$C20,$E93,$A0F
  19812.     dc.b    0            ; RAW/IFF Save, 0=RAW, 1=IFF
  19813.     dc.b    1            ; IntMode, 0=VBLANK, 1=CIA
  19814.     dc.b    0            ; Override
  19815.     dc.b    0            ; Nosamples
  19816.     dc.b    0            ; BlankZero
  19817.     dc.b    1            ; ShowDirs
  19818.     dc.b    0            ; CutToBuf
  19819.     dc.b    0            ; ShowPublic
  19820.     dc.b    1            ; IFFLoop
  19821.     dc.b    0            ; HHFlag
  19822.     dc.w    125            ; Tempo
  19823. DefaultDMAWait
  19824.     dc.w    500            ; DMAWait
  19825. DefaultTuneNote
  19826.     dc.w    24            ; TuneNote (C-3)
  19827.     dc.w    $20            ; TToneVol
  19828. DefaultSalvageAddress
  19829.     dc.l    0,0
  19830. DefaultPTPath
  19831.     dc.b    "ST-00:"        ; Protracker Path  (32 bytes long)
  19832.     dcb.b    26
  19833.     dc.w    6 ; DefaultSpeed
  19834.     dc.w    $0FFF,$0EDE,$0EAC,$0D8B,$0C69,$0C38,$0B16,$0A17    ; VU-Meter
  19835.     dc.w    $0917,$0918,$0818,$0719,$0719,$062A,$052A    ; colors  
  19836.     dc.w    $042B,$042B,$032C,$032C,$023D,$013E,$013E,$003F
  19837.     dc.w    $003F,$014F,$014F,$024E,$025E,$035E,$035E,$046E
  19838.     dc.w    $046E,$046D,$057D,$057D,$067D,$067D,$078D,$078C
  19839.     dc.w    $078C,$089C,$089C,$099C,$09AC,$0AAB,$0AAB,$0BBB,$0BBB
  19840.  
  19841.     dc.w    $0FF3,$0FE3,$0FD3,$0EC3,$0EC4,$0EB4,$0EA4,$0E94 ; Analyzer
  19842.     dc.w    $0D84,$0D74,$0D64,$0D65,$0C55,$0C45,$0C35,$0C26 ; colors  
  19843.     dc.w    $0C26,$0C16,$0C26,$0C26,$0C37,$0C37,$0B47,$0B47
  19844.     dc.w    $0B58,$0B58,$0B68,$0B68,$0B78,$0B79,$0B89,$0A89
  19845.     dc.w    $0A99,$0A9A,$0AAA,$0AAA,$0090,$0080,$0070,$0060
  19846.  
  19847.     dcb.b    302  ; Pad to 1024 bytes
  19848.  
  19849. ;---- Sampler routines ----
  19850.  
  19851. _custom    EQU    $00DFF000
  19852. intreq    EQU    $0000009C
  19853. intreqr    EQU    $0000001E
  19854. intena    EQU    $0000009A
  19855. joy0dat    EQU    $0000000A
  19856. vhposr    EQU    $00000006
  19857. dmacon    EQU    $00000096
  19858. dmaconr    EQU    $00000002
  19859.  
  19860. SamInfoPtr    dc.l    0
  19861. SamInfoLen    dc.l    0
  19862. SampleNote    dc.w    24 ; C-3
  19863. ResampleNote    dc.w    24 ; C-3
  19864. SamIntSave    dc.w    0
  19865. SamDMASave    dc.w    0
  19866.  
  19867. ClearTempSampArea
  19868.     LEA    TempSampArea,A0
  19869.     MOVE    #379,D0
  19870.     MOVEQ    #0,D1
  19871. ctsalop    MOVE    D1,(A0)+
  19872.     DBF    D0,ctsalop
  19873.     RTS
  19874.  
  19875.  
  19876.  
  19877. ;------------------------------- monitor sampler -----------------------
  19878. Sampler    CLR.B    RawKeyCode
  19879.     JSR    StopIt
  19880.     JSR    TopExit
  19881.     JSR    WaitForButtonUp
  19882.     JSR    SetWaitPtrCol
  19883.     BSR    ShowMon
  19884.     JSR    Wait_4000
  19885.     JSR    ClearRightArea
  19886.     JSR    ClearAnalyzerColors
  19887.     BSR    ClearTempSampArea
  19888.     BSR    WaitForDiskDrive
  19889.     MOVE    $DFF01C,SamIntSave ; intenar
  19890.     MOVE    #$7FFF,_custom+intena
  19891.     JSR    TurnOffVoices
  19892.     MOVE    SampleNote,D0
  19893.     ASL    #1,D0
  19894.     LEA    PeriodTable,A0
  19895.     MOVE    (A0,D0.W),D0
  19896.     LSR    #1,D0
  19897.     LEA    $DFF000,A0
  19898.     LEA    $AA(A0),A5
  19899.     LEA    $BA(A0),A6
  19900.     MOVE    D0,$A6(A0)
  19901.     MOVE    D0,$B6(A0)
  19902.     MOVEQ.L    #$40,D0
  19903.     MOVE    D0,$A8(A0)
  19904.     MOVE    D0,$B8(A0)
  19905.     MOVEQ.L    #0,D0
  19906.     MOVE    D0,(A5)
  19907.     MOVE    D0,(A6)
  19908.     MOVE.B    #6,$BFD200
  19909.     MOVEQ.L    #2,D0
  19910.     MOVE.B    D0,$BFD000
  19911.     MOVE.B    #0,$BFE301
  19912.     LEA    GraphOffsets(PC),A0
  19913.     LEA    TempSampArea,A1
  19914.     MOVE.L    TextBplPtr,A2
  19915.     LEA    $9E8-40(A2),A2
  19916.     LEA    $BFE101,A3
  19917.     LEA    _custom+intreqr,A4
  19918.     MOVE    #$180,D7
  19919.     MOVEQ.L    #6,D6
  19920.     MOVEQ.L    #10,D3
  19921. monilop2
  19922.     MOVEQ.L    #22,D5
  19923. monilop4
  19924.     MOVEQ.L    #7,D4
  19925. monilop3
  19926.     BTST    D7,(A4)
  19927.     BEQ.S    monilop3
  19928.     MOVE    D7,$7E(A4)
  19929.     MOVEQ.L    #0,D0
  19930.     MOVE.B    (A3),D0
  19931.     MOVE    D0,D1
  19932.     SUB.B    D7,D0
  19933.     MOVE.B    D0,(A5)
  19934.     MOVE.B    D0,(A6)
  19935.     LSR    #3,D1
  19936.     ADD    D1,D1
  19937.     MOVE    0(A0,D1.W),D0
  19938.     MOVE    (A1),D1
  19939.     MOVE    D0,(A1)+
  19940.     BCLR    D4,0(A2,D1.W)
  19941.     BSET    D4,0(A2,D0.W)
  19942.     DBF    D4,monilop3
  19943.     ADDQ.L    #1,A2
  19944.     DBF    D5,monilop4
  19945.     SUB.L    #23,A2
  19946.     SUB.L    #368,A1
  19947.     BTST    D6,-$0100(A3)
  19948.     BEQ    sampexit
  19949.     BTST    D3,-8(A4)
  19950.     BNE.S    monilop2
  19951.  
  19952. ;-- start sampling --
  19953.  
  19954.     MOVE    InsNum(PC),D1
  19955.     BEQ    sampexit
  19956.     LSL    #2,D1
  19957.     LEA    SamplePtrs,A0
  19958.     MOVE.L    (A0,D1.W),D0
  19959.     BEQ.S    samaok
  19960.     CLR.L    (A0,D1.W)
  19961.     MOVE.L    D0,A1
  19962.     MOVE.L    124(A0,D1.W),D0
  19963.     BEQ.S    samaok
  19964.     CLR.L    124(A0,D1.W)
  19965.     MOVE.L    4.W,A6
  19966.     JSR    LVOFreeMem(A6)
  19967. samaok    MOVE.L    #$FFFE,D6    ; try 64k
  19968. samalclop
  19969.     MOVE.L    D6,D0
  19970.     MOVE.L    #MEMF_CHIP!MEMF_CLEAR,D1
  19971.     MOVE.L    4.W,A6
  19972.     JSR    LVOAllocMem(A6)
  19973.     TST.L    D0
  19974.     BNE.S    samalcok
  19975.     SUB.L    #2048,D6    ; try 2k less
  19976.     BPL.S    samalclop
  19977.     BSR    OutOfMemErr
  19978.     BRA    sampexit
  19979.  
  19980. samalcok
  19981.     MOVE    InsNum(PC),D1
  19982.     LSL    #2,D1
  19983.     LEA    SamplePtrs(PC),A0
  19984.     MOVE.L    D0,(A0,D1.W)
  19985.     MOVE.L    D6,124(A0,D1.W)
  19986.  
  19987.     MOVE    $DFF002,SamDMASave
  19988. ;    MOVE    #$03FF,_custom+dmacon
  19989.     BSR    GetSampleInfo
  19990.     MOVE.L    SamInfoLen,D4
  19991.     MOVE    #0,$DFF100
  19992.     MOVE    #$555,$DFF180                ;SAMPLER COLOR
  19993.     MOVE.L    SamInfoPtr,A1
  19994.     LEA    _custom+intreq,A2
  19995.     LEA    $00BFE101,A3 ; parallel port
  19996.     LEA    _custom+intreqr,A4
  19997.     LEA    $DFF0BA,A6
  19998.  
  19999.     MOVE    #$0180,D7
  20000.     MOVEQ.L    #6,D6
  20001.     MOVEQ.L    #0,D5
  20002. samploop
  20003.     BTST    D7,(A4)
  20004.     BEQ.S    samploop
  20005.     MOVE    D7,(A2)
  20006.     MOVE.B    (A3),D0
  20007.     SUB.B    D7,D0
  20008.     MOVE.B    D0,(A5)
  20009.     MOVE.B    D0,(A6)
  20010.     MOVE.B    D0,(A1)+
  20011.     ADDQ    #1,D5
  20012.     CMP    D4,D5
  20013.     BEQ.S    sampend
  20014.     BTST    D6,-$0100(A3)
  20015.     BNE.S    samploop
  20016. sampend    MOVE    SamDMASave,D0
  20017.     OR    #$8000,D0
  20018.     MOVE    D0,$00DFF096
  20019.  
  20020.     MOVE.L    A1,D0
  20021.     SUB.L    SamInfoPtr(PC),D0
  20022.     MOVE.L    D0,SamInfoLen
  20023.  
  20024.     MOVE.L    SongDataPtr(PC),A0
  20025.     MOVE    InsNum(PC),D1
  20026.     MULU    #30,D1
  20027.     LEA    12(A0,D1.W),A0
  20028.     MOVE.L    SamInfoLen(PC),D0
  20029.     LSR.L    #1,D0
  20030.     MOVE    D0,(A0)+
  20031.     MOVE    #$0040,(A0)+
  20032.     CLR    (A0)+
  20033.     MOVE    #1,(A0)
  20034.  
  20035.     MOVE.L    SamInfoLen(PC),D1
  20036.     NEG.L    D1
  20037.     AND.L    #$FFFFFFF8,D1
  20038.     NEG.L    D1
  20039.     MOVE    InsNum(PC),D0
  20040.     ASL    #2,D0
  20041.     LEA    SamplePtrs,A0
  20042.     CMP.L    124(A0,D0.W),D1
  20043.     BGE.S    sampexit
  20044.     MOVE.L    124(A0,D0.W),D2
  20045.     MOVE.L    D1,124(A0,D0.W)
  20046.     SUB.L    D1,D2
  20047.     MOVE.L    0(A0,D0.W),A1
  20048.     MOVE.L    124(A0,D0.W),D0
  20049.     ADD.L    D0,A1
  20050.     MOVE.L    D2,D0
  20051.     MOVE.L    4.W,A6
  20052.     JSR    LVOFreeMem(A6)
  20053. sampexit
  20054.     MOVE    SamIntSave,D0
  20055.     BSET    #15,D0
  20056.     MOVE    D0,$DFF09A
  20057.     JSR    TurnOffVoices
  20058.     JSR    DisplayMainScreen
  20059.     BSR    ClearSamStarts
  20060.     BSR    ShowSampleInfo
  20061.     BSR    RedrawSample
  20062.     JSR    WaitForButtonUp
  20063.     CLR    KeyBufPos
  20064.     CLR.B    RawKeyCode
  20065.     CLR    ShiftKeyStatus
  20066.     JMP    Wait_4000
  20067.  
  20068. SampleNullInfo
  20069.     CLR.L    SamInfoPtr
  20070.     CLR.L    SamInfoLen
  20071.     MOVEQ    #-1,D0
  20072.     RTS
  20073.  
  20074. GetSampleInfo
  20075.     MOVE    InsNum(PC),D0
  20076.     BEQ.S    SampleNullInfo
  20077.     LSL    #2,D0
  20078.     LEA    SamplePtrs(PC),A0
  20079.     MOVE.L    (A0,D0.W),SamInfoPtr
  20080.     MOVE.L    124(A0,D0.W),SamInfoLen
  20081.     MOVEQ    #0,D0
  20082.     RTS
  20083.  
  20084. ShowMon    SF    ScopeEnable
  20085.     ST    DisableAnalyzer
  20086.     JSR    ClearRightArea
  20087.     LEA    MonitorData,A0
  20088.     MOVEQ    #-1,D4
  20089.     JMP    cgjojo
  20090.  
  20091.  
  20092.  
  20093.  
  20094. ;--------------------------------------------------------------
  20095. WaitForDiskDrive
  20096.     RTS
  20097.     JSR    StorePtrCol
  20098.     MOVE.L    4.W,A6
  20099.     LEA    $15E(A6),A0        ; DeviceList
  20100.     LEA    TrackdiskName,A1    ; trackdisk.device
  20101.     JSR    LVOFindName(A6)
  20102.     MOVE.L    D0,A6
  20103.     LEA    $24(A6),A6        ; dn_GlobalVec
  20104.     MOVE    maxtdrwait,currdel
  20105. trdloop2
  20106.     MOVE.L    A6,A1
  20107.     MOVEQ    #3,D6
  20108. tdrloop    TST.L    (A1)+
  20109.     BEQ.S    tdrskip
  20110.     MOVE.L    -4(A1),A2
  20111.     BTST    #7,$41(A2)
  20112.     BNE.S    tdrskip
  20113.         JSR    SetDiskPtrCol
  20114.         SUBQ    #1,currdel        ;protect against forever
  20115.         BEQ.S    tdrskip            ;waits
  20116.         BRA.S    trdloop2
  20117.  
  20118. tdrskip    DBF    D6,tdrloop
  20119.     JMP    RestorePtrCol
  20120.  
  20121. maxtdrwait    dc.w    1000
  20122. currdel        dc.w    0
  20123.  
  20124.  
  20125.  
  20126.  
  20127. ClearSamStarts
  20128.     LEA    SamplePtrs+4,A0
  20129.     MOVEQ    #30,D0
  20130. cssLoop    MOVE.L    (A0)+,D1
  20131.     BEQ    cssSkip
  20132.     MOVE.L    D1,A1
  20133.     CLR    (A1)
  20134. cssSkip    DBF    D0,cssLoop
  20135.     RTS
  20136.  
  20137. GraphOffsets
  20138.     dc.w 31*40,30*40,29*40,28*40,27*40,26*40,25*40,24*40
  20139.     dc.w 23*40,22*40,21*40,20*40,19*40,18*40,17*40,16*40
  20140.     dc.w 15*40,14*40,13*40,12*40,11*40,10*40,09*40,08*40
  20141.     dc.w 07*40,06*40,05*40,04*40,03*40,02*40,01*40,00*40
  20142.  
  20143. SamNoteType    dc.w    0
  20144.  
  20145. ShowSamNote
  20146.     TST    SamScrEnable
  20147.     BEQ    Return2
  20148.     MOVE.L    NoteNamesPtr,A4
  20149.     MOVE    #237*40+36,TextOffset
  20150.     MOVE    SampleNote,D0
  20151.     LSL    #2,D0
  20152.     LEA    (A4,D0.W),A0
  20153.     MOVE.L    A0,ShowTextPtr
  20154.     MOVE    #4,TextLength
  20155.     BRA    ShowText
  20156.  
  20157. ShowResamNote
  20158.     TST    SamScrEnable
  20159.     BEQ    Return2
  20160.     MOVE.L    NoteNamesPtr,A4
  20161.     MOVE    #248*40+36,TextOffset
  20162.     MOVE    ResampleNote,D0
  20163.     LSL    #2,D0
  20164.     LEA    (A4,D0.W),A0
  20165.     MOVE.L    A0,ShowTextPtr
  20166.     MOVE    #4,TextLength
  20167.     BRA    ShowText
  20168.  
  20169. ;---- Graphics Data ----
  20170.  
  20171.     IFD    _largetext
  20172. SpectrumAnaData    INCBIN "big/iff/ptspectrumana.iff"
  20173.         cnop 0,2
  20174.     ELSE
  20175. SpectrumAnaData    INCBIN "small/iff/ptspectrumana.iff"
  20176.         cnop 0,2
  20177.     ENDC
  20178.  
  20179.     IFD    _largetext
  20180. ScopeData    INCBIN "big/iff/ptscope.iff"
  20181.         cnop 0,2
  20182.     ELSE
  20183. ScopeData    INCBIN "small/iff/ptscope.iff"
  20184.         cnop 0,2
  20185.     ENDC
  20186.  
  20187.     IFD    _largetext
  20188. DirScreenData    INCBIN "big/iff/ptfilereq.iff"
  20189.         cnop 0,2
  20190.     ELSE
  20191. DirScreenData    INCBIN "small/iff/ptfilereq.iff"
  20192.         cnop 0,2
  20193.     ENDC
  20194.  
  20195.     IFD    _largetext
  20196. PLSTData    INCBIN "big/iff/ptplst.iff"
  20197.         cnop 0,2
  20198.     ELSE
  20199. PLSTData    INCBIN "small/iff/ptplst.iff"
  20200.         cnop 0,2
  20201.     ENDC
  20202.  
  20203.     IFD    _largetext
  20204. Edit1Data    INCBIN "big/iff/ptedit1.iff"
  20205.         cnop 0,2
  20206.     ELSE
  20207. Edit1Data    INCBIN "small/iff/ptedit1.iff"
  20208.         cnop 0,2
  20209.     ENDC
  20210.  
  20211.     IFD    _largetext
  20212. Edit2Data    INCBIN "big/iff/ptedit2.iff"
  20213.         cnop 0,2
  20214.     ELSE
  20215. Edit2Data    INCBIN "small/iff/ptedit2.iff"
  20216.         cnop 0,2
  20217.     ENDC
  20218.  
  20219.     IFD    _largetext
  20220. Edit3Data    INCBIN "big/iff/ptedit3.iff"
  20221.         cnop 0,2
  20222.     ELSE
  20223. Edit3Data    INCBIN "small/iff/ptedit3.iff"
  20224.         cnop 0,2
  20225.     ENDC
  20226.  
  20227.     IFD    _largetext
  20228. SetupScreenData    INCBIN "big/iff/ptsetup.iff"
  20229.         cnop 0,2
  20230.     ELSE
  20231. SetupScreenData    INCBIN "small/iff/ptsetup.iff"
  20232.         cnop 0,2
  20233.     ENDC
  20234.  
  20235.     IFD    _largetext
  20236. Setup2Data    INCBIN "big/iff/ptsetup2.iff"
  20237.         cnop 0,2
  20238.     ELSE
  20239. Setup2Data    INCBIN "small/iff/ptsetup2.iff"
  20240.         cnop 0,2
  20241.     ENDC
  20242.  
  20243.     IFD    _largetext
  20244. PresetEdData    INCBIN "big/iff/ptpreseted.iff"
  20245.         cnop 0,2
  20246.     ELSE
  20247. PresetEdData    INCBIN "small/iff/ptpreseted.iff"
  20248.         cnop 0,2
  20249.     ENDC
  20250.  
  20251.     IFD    _largetext
  20252. SampScreenData    INCBIN "big/iff/ptsampler.iff"
  20253.         cnop 0,2
  20254.     ELSE
  20255. SampScreenData    INCBIN "small/iff/ptsampler.iff"
  20256.         cnop 0,2
  20257.     ENDC
  20258.  
  20259.     IFD    _largetext
  20260. MonitorData    INCBIN "big/iff/ptmonitor.iff"
  20261.         cnop 0,2
  20262.     ELSE
  20263. MonitorData    INCBIN "small/iff/ptmonitor.iff"
  20264.         cnop 0,2
  20265.     ENDC
  20266.  
  20267.     IFD    _largetext
  20268. HelpScreenData    INCBIN "big/iff/pthelpscreen.iff"
  20269.         cnop 0,2
  20270.     ELSE
  20271. HelpScreenData    INCBIN "small/iff/pthelpscreen.iff"
  20272.         cnop 0,2
  20273.     ENDC
  20274.  
  20275.     IFD    _largetext
  20276. MainScreenData    INCBIN "big/iff/PTMainScreen.iff"
  20277.         cnop 0,2
  20278.     ELSE
  20279. MainScreenData    INCBIN "small/iff/PTMainScreen.iff"
  20280.         cnop 0,2
  20281.     ENDC
  20282.  
  20283.  
  20284. ;--------- raw gfx data!!
  20285. FontData    INCBIN "raw/ptfont.raw"        ;general font 8x8
  20286. FontSize    =*-FontData
  20287.         cnop 0,2
  20288.  
  20289. SureBoxData    INCBIN "raw/ptsurebox.raw"
  20290. SureBoxSize    =*-SureBoxData
  20291.         cnop 0,2
  20292.  
  20293. ClearBoxData    INCBIN "raw/ptclearbox.raw"
  20294. ClearBoxSize    =*-ClearBoxData
  20295.         cnop 0,2
  20296.  
  20297. FormatBoxData    INCBIN "raw/ptformatbox.raw"
  20298. FormatBoxSize    =*-FormatBoxData
  20299.         cnop 0,2
  20300.  
  20301. VolBoxData    INCBIN "raw/ptvolbox.raw"
  20302. ToggleONdata    INCBIN "raw/PTToggleON.raw"
  20303. ToggleOFFdata    INCBIN "raw/PTToggleOFF.raw"
  20304. S_BoxData    INCBIN "raw/PTLetters.raw"
  20305.  
  20306.  
  20307.  
  20308. ;************************** CHIP DATA HUNK **************************
  20309.     SECTION ptdata2,BSS_C
  20310. BitPlaneData    ds.b    (ScreenWidth*256*2)+8
  20311.  
  20312.     SECTION ptdata,DATA_C
  20313. TToneData    ; Tuning Tone (Sine Wave)
  20314.     dc.b    0,  25,  49,  71,  91, 106, 118, 126
  20315.     dc.b  127, 126, 118, 106,  91,  71,  49,  25
  20316.     dc.b    0, -25, -49, -71, -91,-106,-118,-126
  20317.     dc.b -127,-126,-118,-106, -91, -71, -49, -25
  20318.  
  20319. ; in chipram so that it runs slooowwly on FAST! Amigas
  20320. ; coz of lotsa wait states!!
  20321. ;
  20322. DMAWaitLoop
  20323.     MOVE.L    D0,-(SP)
  20324.     MOVE    DMAWait,D0
  20325. dpnolp1    DBF    D0,dpnolp1
  20326.     MOVE.L    (SP)+,D0
  20327.     RTS
  20328.  
  20329. ; as above >>>> NEVER use speed critical timings useing CPU loops
  20330. ;        its is just lame!  SO its placed in CHIP ram for HIGH
  20331. ;        WAIT-STATES
  20332. Wait_4000
  20333.     MOVE.L    D0,-(SP)
  20334.     MOVE    #$4000,D0
  20335.     TST.B    HHFlag
  20336.     BEQ.S    wl_loop
  20337.     MOVE    #$FFFF,D0
  20338. wl_lop1    DBF    D0,wl_lop1
  20339.     MOVE    #$A000,D0
  20340. wl_loop    DBF    D0,wl_loop
  20341.     MOVE.L    (SP)+,D0
  20342.     RTS
  20343.  
  20344.  
  20345. CopListB
  20346.     dc.l    $01800000
  20347.     dc.l    $008a0000
  20348.     dc.l    -2
  20349.  
  20350. ;-----------------------------------------------------------------
  20351. ; copper list  (very hard to implement into the OS as a screen!!
  20352. ; allways enable AGA_bplcon3 !!
  20353. ;
  20354. CopList
  20355.         dc.l    $01fc0000       ;MAKES ECS-COPPERLIST WORK IN AGA MODE 100%
  20356.  
  20357.     dc.l    $01800000
  20358.     dc.l    $008E2c81    ; Display Window Start    2C/81
  20359.     dc.l    $00902cC1    ; Display Window Stop     2C/C1
  20360.     dc.l    $00920038    ; Display Data Fetch Start
  20361.     dc.l    $009400d0    ; Display Data Fetch Stop
  20362.     dc.l    $01003300    ; bplcon0
  20363.     dc.l    $01020000    ; bplcon1
  20364.     dc.l    $01040024    ; bplcon2 (24)
  20365. ;    dc.l    $01060c00    ; bplcon3
  20366.                 ;x4x=lores sprite
  20367.                 ;x8x=hires sprite
  20368.                 ;xCx=superhires sprite
  20369.                 ;x0x=normal ECS sprite
  20370.                 ;Exx=set lo=nibbles of 24bit palette $180..
  20371.                 ;Cxx=set hi-nibbles of 24bit palette
  20372.     dc.l    $01080000
  20373.     dc.l    $010A0000
  20374. ;    dc.l    $010c0011    ;aabb    aa=bitplane color bank ???
  20375.                 ;    bb=sprite color bank ???
  20376.  
  20377. SprList    dc.l    $01200000    ;Sprite 0 high
  20378.     dc.l    $01220000    ;Sprite 0 low
  20379.     dc.l    $01240000    ;Sprite 1 high
  20380.     dc.l    $01260000    ;Sprite 1 low
  20381.     dc.l    $01280000    ;Sprite 2 high
  20382.     dc.l    $012A0000    ;Sprite 2 low
  20383.     dc.l    $012C0000    ;Sprite 3 high
  20384.     dc.l    $012E0000    ;Sprite 3 low
  20385.     dc.l    $01300000    ;Sprite 4 high
  20386.     dc.l    $01320000    ;Sprite 4 low
  20387.     dc.l    $01340000    ;Sprite 5 high
  20388.     dc.l    $01360000    ;Sprite 5 low
  20389.     dc.l    $01380000    ;Sprite 6 high
  20390.     dc.l    $013A0000    ;Sprite 6 low
  20391.     dc.l    $013C0000    ;Sprite 7 high
  20392.     dc.l    $013E0000    ;Sprite 7 low
  20393.  
  20394. CopListBitplanes
  20395.     dc.l    $00E00000    ;Bitplane 0 high
  20396.     dc.l    $00E20000    ;Bitplane 0 low
  20397.     dc.l    $00E40000    ;Bitplane 1 high
  20398.     dc.l    $00E60000    ;Bitplane 1 low
  20399.     dc.l    $00E80000    ;Bitplane 2 high
  20400. NoteBplptrHigh=*-2
  20401.     dc.l    $00EA0000    ;Bitplane 2 low
  20402. NoteBplptrLow=*-2
  20403.  
  20404. CopListColors
  20405.     dc.l    $01A20AAA    ; Color 17
  20406.     dc.l    $01A40888    ; Color 18
  20407.     dc.l    $01A60666    ; Color 19
  20408.     dc.l    $01A00000    ; Color 16
  20409.     dc.l    $01800000    ; Color 0
  20410. CopCol0=*-2
  20411.     dc.l    $01820AAA    ; Color 1
  20412.     dc.l    $01840777    ; Color 2
  20413.     dc.l    $01860444    ; Color 3
  20414.     dc.l    $01880CCC    ; Color 4
  20415.     dc.l    $018A0A00    ; Color 5
  20416.     dc.l    $018C0000    ; Color 6
  20417.     dc.l    $018E004D    ; Color 7
  20418.     dc.l    $01AE0A00    ; Color 23
  20419.     dc.l    $01AA0700    ; Color 21
  20420.     dc.l    $01AC0400    ; Color 22
  20421.  
  20422.     dc.l    $2C09FFFE    ; Wait for line $2C, pos $07
  20423.     dc.l    $01003300    ; bplcon0
  20424. CopListAnalyzer
  20425.     dcb.w    320,0
  20426. CopListInsPos
  20427.     dc.l    $B807FFFE    ; Wait for line $88, pos $07
  20428.     dc.l    $01002300    ; bplcon0
  20429. CopListBpl4
  20430.     dc.l    $00E80000    ; Bitplane 4 high
  20431.     dc.l    $00EA0000    ; Bitplane 4 low
  20432.     dc.w    $0188    ; Color 4
  20433. NoteCol    dc.w    $004D
  20434.     dc.l    $B907FFFE    ; Wait for line $89, pos $07
  20435.     dc.l    $01003300    ; bplcon0
  20436. CopListMark2
  20437.     dcb.w    672,0
  20438.  
  20439.     dc.l    $E907FFFE    ; Wait for line $E9, pos $07
  20440.     dc.l    $010AFFD8    ; bpl2mod
  20441.     dc.l    $0108FFD8    ; bpl1mod
  20442.     dc.l    $EA07FFFE    ; Wait for line $EA, pos $07
  20443.     dc.l    $01040010    ; bplcon2
  20444.     dc.l    $010A0000    ; bpl2mod
  20445.     dc.l    $01080000    ; bpl1mod
  20446.     dc.l    $EB07FFFE    ; Wait for line $E8, pos $07
  20447.     dc.l    $010AFFD8    ; bpl2mod
  20448.     dc.l    $0108FFD8    ; bpl1mod
  20449.     dc.l    $EC07FFFE    ; Wait for line $EC, pos $07
  20450.     dc.l    $010A0000    ; bpl2mod
  20451.     dc.l    $01080000    ; bpl1mod
  20452.     dc.l    $ED07FFFE    ; Wait for line $ED, pos $07
  20453.     dc.l    $010AFFD8    ; bpl2mod
  20454.     dc.l    $0108FFD8    ; bpl1mod
  20455.     dc.l    $EE07FFFE    ; Wait for line $EE, pos $07
  20456.     dc.l    $010A0000    ; bpl2mod
  20457.     dc.l    $01080000    ; bpl1mod
  20458.     dc.l    $EF07FFFE    ; Wait for line $EF, pos $07
  20459.     dc.l    $010AFFD8    ; bpl2mod
  20460.     dc.l    $0108FFD8    ; bpl1mod
  20461.     dc.l    $F007FFFE    ; Wait for line $F0, pos $07
  20462.     dc.l    $010A0000    ; bpl2mod
  20463.     dc.l    $01080000    ; bpl1mod
  20464.     dc.l    $F107FFFE    ; Wait for line $F1, pos $07
  20465.     dc.l    $010AFFD8    ; bpl2mod
  20466.     dc.l    $0108FFD8    ; bpl1mod
  20467.     dc.l    $F207FFFE    ; Wait for line $F2, pos $07
  20468.     dc.l    $010A0000    ; bpl2mod
  20469.     dc.l    $01080000    ; bpl1mod
  20470.     dc.l    $F307FFFE    ; Wait for line $F3, pos $07
  20471.     dc.l    $010AFFD8    ; bpl2mod
  20472.     dc.l    $0108FFD8    ; bpl1mod
  20473.     dc.l    $F407FFFE    ; Wait for line $F4, pos $07
  20474.     dc.l    $010A0000    ; bpl2mod
  20475.     dc.l    $01080000    ; bpl1mod
  20476.     dc.l    $F507FFFE    ; Wait for line $F5, pos $07
  20477.     dc.l    $010AFFD8    ; bpl2mod
  20478.     dc.l    $0108FFD8    ; bpl1mod
  20479.     dc.l    $F607FFFE    ; Wait for line $F6, pos $07
  20480.     dc.l    $010A0000    ; bpl2mod
  20481.     dc.l    $01080000    ; bpl1mod
  20482.     dc.l    $01B20000    ; Color 1
  20483.     dc.l    $01B40000    ; Color 2
  20484.     dc.l    $01B60000    ; Color 3
  20485.     dc.l    $01BA0000    ; Color 5
  20486.     dc.l    $01BC0000    ; Color 6
  20487.     dc.l    $01BE0000    ; Color 7
  20488.     dc.l    $FFDFFFFE    ; Wait for line $FF, pos $DF
  20489.     dc.l    $2907FFFE    ; Wait for line $29, pos $07
  20490.     dc.l    $01002300    ; bplcon0
  20491.     dc.l    $2C07FFFE    ; Wait for line $2C, pos $07
  20492.     dc.l    $01000300    ; bplcon0
  20493.     dc.l    $3509fffe,$01800000
  20494.  
  20495.     dc.l    $008a0000
  20496.     dc.l    $FFFFFFFE    ; Wait for line $FF, pos $FF
  20497.                 ; End of copperlist
  20498.  
  20499. ;****************************************************************************
  20500. CopList2
  20501.     dc.l    $B607FFFE    ; Wait for line $B6, pos $07
  20502.     dc.l    $01002300    ; bplcon0
  20503. CopList2Bpl4Ptr
  20504.     dc.l    $00E80000    ; Bitplane 4 high
  20505.     dc.l    $00EA0000    ; Bitplane 4 low
  20506.     dc.l    $0188004D    ; Color 4
  20507.     dc.l    $01B200F0    ; LoopSprite color
  20508.     dc.l    $01BA00FF    ; PlayPos Sprite color
  20509.     dc.l    $B707FFFE    ; Wait for line $B7, pos $07
  20510.     dc.l    $01003300    ; bplcon0
  20511.     dc.l    $FFDFFFFE    ; Wait for line $FF, pos $DF
  20512.     dc.l    $2907FFFE    ; Wait for line $29, pos $07
  20513.     dc.l    $01002300    ; bplcon0
  20514.     dc.l    $2C07FFFE    ; Wait for line $2C, pos $07
  20515.     dc.l    $01000300    ; bplcon0
  20516.     dc.l    $FFFFFFFE    ; Wait for line $FF, pos $FF
  20517.                 ; End of copperlist
  20518.  
  20519.  
  20520. PointerSpriteData
  20521.     dc.w    0,0
  20522.     INCBIN    "raw/PTPointer.raw"
  20523. NoSpriteData
  20524.     dc.w    0,0,0,0
  20525. CursorSpriteData
  20526.     dc.w    0,0
  20527.     dc.w    $FFE0,$FFE0,$FFE0,$FFE0,$8020,$0000,$8020,$0000
  20528.     dc.w    $8020,$0000,$8020,$0000,$8020,$0000,$8020,$0000
  20529.     dc.w    $8020,$0000,$8020,$0000,$8020,$0000,$8020,$0000
  20530.     dc.w    $0000,$FFE0,$0000,$FFE0
  20531.     dc.w    0,0
  20532. LineCurSpriteData
  20533.     dc.w    0,0,$0000,$FE00,$0000,$FE00,$0000,$0000,0,0
  20534. VUSpriteData1
  20535.     dc.w    $E95B,$EA01
  20536.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20537.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20538.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20539.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20540.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20541.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20542.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20543.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20544.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20545.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20546.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20547.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20548.     dc.w    0,0
  20549. VUSpriteData2
  20550.     dc.w    $E97F,$EA01
  20551.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20552.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20553.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20554.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20555.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20556.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20557.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20558.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20559.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20560.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20561.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20562.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20563.     dc.w    0,0
  20564. VUSpriteData3
  20565.     dc.w    $E9A3,$EA01
  20566.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20567.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20568.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20569.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20570.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20571.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20572.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20573.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20574.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20575.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20576.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20577.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20578.     dc.w    0,0
  20579. VUSpriteData4
  20580.     dc.w    $E9C7,$EA01
  20581.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20582.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20583.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20584.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20585.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20586.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20587.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20588.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20589.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20590.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20591.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20592.     dc.w    $C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0,$C0C0,$3FC0
  20593.     dc.w    0,0
  20594. LoopSpriteData1
  20595.     dc.w 0,0
  20596.     dc.w $F000,0,$F000,0,$F000,0,$F000,0,$1000,0,$1000,0,$1000,0,$1000,0
  20597.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  20598.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  20599.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$7000,0
  20600.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  20601.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  20602.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  20603.     dc.w $1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0,$1000,0
  20604.     dc.w 0,0
  20605. LoopSpriteData2
  20606.     dc.w 0,0
  20607.     dc.w $F000,0,$F000,0,$F000,0,$F000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20608.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20609.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20610.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$E000,0
  20611.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20612.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20613.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20614.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20615.     dc.w 0,0
  20616. PlayPosSpriteData
  20617.     dc.w 0,0
  20618.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20619.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20620.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20621.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20622.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20623.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20624.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20625.     dc.w $8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0,$8000,0
  20626.     dc.w 0,0
  20627.  
  20628. ;******** BSS HUNK ********
  20629.  
  20630.     SECTION ptbss,BSS
  20631.  
  20632. FileInfoBlock    ds.b    256 ;,0
  20633.  
  20634. FIB_EntryType    EQU    FileInfoBlock+4
  20635. FIB_FileName    EQU    FileInfoBlock+8
  20636. FIB_FileSize    EQU    FileInfoBlock+124
  20637. FIB_DateStamp    EQU    FileInfoBlock+132
  20638.  
  20639. InfoData    ds.b    36
  20640. TopMenusBuffer    ds.b    2200
  20641. TextDataBuffer    ds.b    546  
  20642. TrackBuffer    ds.b    256
  20643. CmdsBuffer    ds.b    256
  20644. BlockBuffer    ds.b    256
  20645. PatternBuffer    ds.b    1024
  20646. UndoBuffer    ds.b    1024
  20647.  
  20648. TrackdiskIOExtTD
  20649.         ds.w    1
  20650.         ds.l    3
  20651. TDPortPtr    ds.l    1
  20652.         ds.w    1
  20653. Fmt_tja        ds.w    1
  20654.         ds.l    2
  20655.         ds.b    3
  20656. Fmt_hmmm    ds.b    1
  20657.         ds.w    1
  20658. FmtDataSize    ds.w    2
  20659. FmtDataPtr    ds.w    2
  20660. FmtDiskOffset    ds.l    9
  20661.  
  20662. SplitTransTable    ds.b    38
  20663. SplitInstrTable    ds.b    38
  20664.  
  20665. ModulesPath2    ds.b    64
  20666. SongsPath2    ds.b    64
  20667. SamplePath2    ds.b    64
  20668.  
  20669.         ds.l    1
  20670.  
  20671. SetupData    ds.b    26
  20672. SongsPath    ds.b    32
  20673. ModulesPath    ds.b    32
  20674. SamplePath    ds.b    32
  20675. PrintPath    ds.b    32
  20676. ColorTable    ds.w    8
  20677. PackMode    ds.b    1
  20678. ModPackMode    ds.b    1
  20679. SplitFlag    ds.b    1
  20680. FilterFlag    ds.b    1
  20681. TransDelFlag    ds.b    1
  20682. ShowDecFlag    ds.b    1
  20683. AutoDirFlag    ds.b    1
  20684. AutoExitFlag    ds.b    1
  20685. ModOnlyFlag    ds.b    1
  20686. MIDIFlag    ds.b    1
  20687. SplitData    ds.b    4
  20688.         ds.b    4
  20689.         ds.b    4
  20690.         ds.b    4
  20691. KeyRepDelay    ds.w    1
  20692. KeyRepSpeed    ds.w    1
  20693. Accidental    ds.b    1
  20694.         ds.b    1
  20695. ExtCommands    ds.b    32*8 ; 256 bytes
  20696. MaxDirEntries    ds.w    1
  20697. MaxPLSTEntries    ds.w    1
  20698. MultiModeNext    ds.b    4
  20699. EffectMacros    ds.w    10
  20700. RAWIFFMode    ds.b    1
  20701. IntMode        ds.b    1
  20702. OverrideFlag    ds.b    1
  20703. NosamplesFlag    ds.b    1
  20704. BlankZeroFlag    ds.b    1
  20705. ShowDirsFlag    ds.b    1
  20706. ShowPublicFlag    ds.b    1
  20707. CutToBufFlag    ds.b    1
  20708. IFFLoopFlag    ds.b    1
  20709. HHFlag        ds.b    1
  20710. Tempo        ds.w    1
  20711. DMAWait        ds.w    1
  20712. TuneNote    ds.w    1
  20713. TToneVol    ds.w    1
  20714. SalvageAddress    ds.b    8
  20715. PTPath        ds.b    32  ; 512 bytes
  20716. DefaultSpeed    ds.w    1
  20717. VUMeterColors    ds.w    48
  20718. AnalyzerColors    ds.w    40
  20719.         ds.b    302 ; Pad to 1024 bytes
  20720.  
  20721. HelpTextIndex    ds.l    256
  20722. HelpTextData    ds.b    (ScreenWidth*16)+16
  20723.  
  20724. InpEvPort    ds.b    34
  20725. InpEvIOReq    ds.b    48
  20726.  
  20727. ScopeInfo    ds.b    20*4
  20728. ScopeSamInfo    ds.b    16*31
  20729. BlankSample    ds.b    320
  20730. FileName    ds.b    96
  20731. NewFileName    ds.b    96
  20732. SampleFileName    ds.b    28
  20733. PresetNameText    ds.b    22
  20734. DirInputName    ds.b    30
  20735. NewInputName    ds.b    30
  20736. TempSampArea    ds.w    380
  20737. SaveColors    ds.w    40+48
  20738.  
  20739.  
  20740.  
  20741. ;****************************************************************************
  20742. ;********   full monitor!
  20743. ;****************************************************************************
  20744.  
  20745.  
  20746.  
  20747. xsize = 320
  20748. ysize = 256
  20749.  
  20750.  
  20751.     section    main,CODE
  20752. BigMonitor
  20753.     btst    #6,$bfe001
  20754.     beq.s    BigMonitor
  20755.  
  20756.     movem.l    d0-d7/a0-a6,-(sp)
  20757.     lea    $dff000,a6
  20758.     move    #$4000,$9a(a6)
  20759.     move    #$0400,$96(a6)
  20760.     move    #$83ff,$96(a6)
  20761.     move.l    #bm_copper,$80(a6)
  20762.     move    #0,$88(a6)
  20763.  
  20764.     bsr    bm_SamplerInit
  20765.     bsr    bm_setplane
  20766.  
  20767. bm_main1
  20768.     bsr    bm_Sampler
  20769.  
  20770.     bsr    noflash
  20771.  
  20772.     btst    #6,$bfe001
  20773.     bne.s    bm_main1
  20774.  
  20775. .wblit    btst    #$E,$2(a6)
  20776.     bne.s    .wblit
  20777.     bsr    bm_SampEnd
  20778.     move    #$c000,$9a(a6)
  20779.     jsr    SetCopList
  20780.     movem.l    (sp)+,d0-d7/a0-a6
  20781.     rts
  20782.  
  20783.  
  20784.  
  20785. page    dc.w    0
  20786.  
  20787. bm_setplane
  20788.     moveq    #4-1,d1
  20789.     lea    bp_pn,a0
  20790.     add.l    #bm_screen+2,d0
  20791. .mkbp1    move    d0,6(a0)
  20792.     swap    d0
  20793.     move    d0,2(a0)
  20794.     swap    d0
  20795.     add.l    #64,d0
  20796.     addq.l    #8,a0
  20797.     dbf    d1,.mkbp1
  20798.     rts
  20799.  
  20800. ******************************************************
  20801. bm_SamplerInit
  20802.     MOVE    $DFF01C,SamIntSave        ; intenar
  20803.     bsr    voiceoff
  20804.     MOVE    bm_SampleNote(pc),D0
  20805.     ASL    #1,D0
  20806.     LEA    PeriodTable,A0
  20807.     MOVE    (A0,D0.W),D0
  20808.     ADD    bm_Tuning(pc),D0
  20809.     LSR    #1,D0
  20810.     LEA    $DFF000,A6
  20811.     MOVE    D0,$A6(A6)            ;set period
  20812.     MOVE    D0,$B6(A6)
  20813.     MOVEQ    #$40,D0
  20814.     MOVE    D0,$A8(A6)            ;set volume
  20815.     MOVE    D0,$B8(A6)
  20816.     MOVEQ    #0,D0
  20817.     MOVE    D0,$AA(A6)            ;clear 1st data
  20818.     MOVE    D0,$BA(A6)
  20819.     MOVE.B    #6,$BFD200
  20820.     MOVE.B    #2,$BFD000
  20821.     MOVE.B    #0,$BFE301
  20822.     RTS
  20823.  
  20824. bm_Sampler
  20825.     lea    bm_screen,a0
  20826.     lea    plottab(pc),a1
  20827.     lea    sambuf(pc),a5
  20828.  
  20829.     LEA    $dff09c,A2            ;intreq
  20830.     LEA    $BFE101,A3            ;parallel port
  20831.     LEA    $dff01e,A4            ;intreqr
  20832.     MOVE    #$0180,D7            ;used for calc
  20833.     MOVE    #180,D6                ;loop counter
  20834.     move    #64,d2
  20835.     MOVEQ    #0,D5                ;pixel offset counter
  20836. .samploop                    ;main sampling loop --->
  20837.     BTST    D7,(A4)
  20838.     BEQ.S    .samploop
  20839.     MOVE    D7,(A2)
  20840.     MOVEQ    #0,D0
  20841.     MOVE.B    (A3),D0            ;read sampler number
  20842. ; move $a(a6),d1
  20843. ; asr  #8,d1
  20844. ; add.b  d1,d0
  20845.     SUB.B    D7,D0
  20846.     MOVE.B    D0,$AA(A6)
  20847.     MOVE.B    D0,$BA(A6)
  20848.  
  20849.     add.b    d7,d0            ;YPOS= [0..255]
  20850.     move    d0,d1
  20851.  
  20852.     move.b    1(a5,d5.w),d0
  20853.  
  20854.     asl    #6,d0            ;YPOS=YPOS*screen x size
  20855.     move    d5,d4            ;get x pos
  20856.     asr    #4,d4            ;XPOS=word position
  20857.     add    d4,d4
  20858.     add    d4,d0            ;offset=xpos*2 + YPOS
  20859.     move    d5,d4
  20860.     and    #%1111,d4
  20861.     move    (a1,d4.w),d4
  20862.     not    d4
  20863.     and    d4,(a0,d0.w)
  20864.     add    d2,d0
  20865.     and    d4,(a0,d0.w)
  20866.     add    d2,d0
  20867.     and    d4,(a0,d0.w)
  20868.     add    d2,d0
  20869.     and    d4,(a0,d0.w)
  20870.     add    d2,d0
  20871.     and    d4,(a0,d0.w)
  20872.     add    d2,d0
  20873.     and    d4,(a0,d0.w)
  20874.  
  20875.     move    d1,d0
  20876.     move.b    d0,1(a5,d5.w)
  20877.  
  20878.     asl    #6,d0            ;YPOS=YPOS*screen x size
  20879.     move    d5,d4            ;get x pos
  20880.     asr    #4,d4            ;XPOS=word position
  20881.     add    d4,d4
  20882.     add    d4,d0            ;offset=xpos*2 + YPOS
  20883.     move    d5,d4
  20884.     and    #%1111,d4
  20885.     move    (a1,d4.w),d4
  20886.     or    d4,(a0,d0.w)
  20887.     add    d2,d0
  20888.     or    d4,(a0,d0.w)
  20889.     add    d2,d0
  20890.     or    d4,(a0,d0.w)
  20891.     add    d2,d0
  20892.     or    d4,(a0,d0.w)
  20893.     add    d2,d0
  20894.     or    d4,(a0,d0.w)
  20895.     add    d2,d0
  20896.     or    d4,(a0,d0.w)
  20897.  
  20898.     move    -0(a5,d5.w),d0
  20899.     add    -2(a5,d5.w),d0
  20900.     add    -4(a5,d5.w),d0
  20901.     add    -6(a5,d5.w),d0
  20902.     add    -8(a5,d5.w),d0
  20903.     cmp    #(level*5),d0
  20904.     ble.s    .flash
  20905.     cmp    #(255-level)*5,d0
  20906.     bge.s    .flash
  20907.  
  20908. .cont    addq    #2,d5
  20909.     dbf    d6,.samploop
  20910.     rts
  20911.  
  20912. level = 7
  20913.  
  20914. .flash    MOVEM.L    A0-A1,-(SP)
  20915.     LEA    Colortab2,A0
  20916.     LEA    colors,A1
  20917.     MOVE    (A0)+,2(A1)
  20918.     MOVE    (A0)+,6(A1)
  20919.     MOVE    (A0)+,10(A1)
  20920.     MOVE    (A0)+,14(A1)
  20921.     MOVE    (A0)+,18(A1)
  20922.     MOVE    (A0)+,22(A1)
  20923.     MOVEM.L    (SP)+,A0-A1
  20924.     BRA.S    .cont
  20925.  
  20926. noflash    MOVEM.L    A0-A1,-(SP)
  20927.     LEA    Colortab1(pc),A0
  20928.     LEA    colors,A1
  20929.     MOVE    (A0)+,2(A1)
  20930.     MOVE    (A0)+,6(A1)
  20931.     MOVE    (A0)+,10(A1)
  20932.     MOVE    (A0)+,14(A1)
  20933.     MOVE    (A0)+,18(A1)
  20934.     MOVE    (A0)+,22(A1)
  20935.     MOVEM.L    (SP)+,A0-A1
  20936.     rts
  20937.  
  20938. plottab    dc.w    %1100000000000000
  20939.     dc.w    %11000000000000
  20940.     dc.w    %110000000000
  20941.     dc.w    %1100000000
  20942.     dc.w    %11000000
  20943.     dc.w    %110000
  20944.     dc.w    %1100
  20945.     dc.w    %11
  20946.  
  20947.     ds.b    8
  20948. sambuf    dcb.w    256,0
  20949.  
  20950.  
  20951. bm_SampEnd
  20952.     MOVE    SamIntSave,D0
  20953.     BSET    #15,D0
  20954.     MOVE    D0,$DFF09A
  20955.     bsr    voiceoff
  20956.     rts
  20957.  
  20958. voiceoff
  20959.     MOVE    #$000F,$DFF096
  20960.     MOVEQ    #0,d0
  20961.     move    d0,$DFF0A8
  20962.     move    d0,$DFF0B8
  20963.     move    d0,$DFF0C8
  20964.     move    d0,$DFF0D8
  20965.     rts
  20966.  
  20967. bm_SampleNote    dc.w    30    ;as in Protracker  (0.......+35)
  20968. bm_Tuning    dc.w    0    ;as in Protracker  (-48.....+48)
  20969.  
  20970.  
  20971. Colortab1:    DC.W    $000
  20972.         dc.w    $421
  20973.         dc.w    $872
  20974.         dc.w    $ca3
  20975.         dc.w    $ff4
  20976.         dc.w    $ca3
  20977.         dc.w    $872
  20978.         dc.w    $421
  20979.         
  20980. Colortab2:    DC.W    $00f
  20981.         dc.w    $333
  20982.         dc.w    $888
  20983.         dc.w    $ccc
  20984.         dc.w    $fff
  20985.         dc.w    $ccc
  20986.         dc.w    $888
  20987.         dc.w    $333
  20988.  
  20989.  
  20990.     section    chipdata,DATA_C
  20991. *************************************************************
  20992. bm_copper:
  20993.     dc.l $008e2950,$00902cd6
  20994.     dc.l $00920030,$009400d8
  20995.     dc.l $01080014,$010a0014,$01fc0000
  20996.  
  20997.     dc.l $01200000,$01220000
  20998.     dc.l $01240000,$01260000
  20999.     dc.l $01280000,$012a0000
  21000.     dc.l $012c0000,$012e0000
  21001.     dc.l $01300000,$01320000
  21002.     dc.l $01340000,$01360000
  21003.     dc.l $01380000,$013a0000
  21004.     dc.l $013c0000,$013e0000
  21005.  
  21006. colors    dc.l $01800000
  21007.     dc.l $01820420
  21008.     dc.l $01860861
  21009.     dc.l $018e0ba3
  21010.     dc.l $019e0ff6
  21011.     dc.l $019c0ba3
  21012.     dc.l $01980861
  21013.     dc.l $01900420
  21014.  
  21015. bp_pn    dc.l $00e00007,$00e20000
  21016.     dc.l $00e40007,$00e60000
  21017.     dc.l $00e80007,$00ea0000
  21018.     dc.l $00ec0007,$00ee0000
  21019.     dc.l $00f00000,$00f20000,$01004304
  21020.     dc.l -2
  21021.  
  21022.  
  21023.  
  21024.     section    mtdata,BSS_C
  21025.     ds.b    (64)*10
  21026. bm_screen
  21027.     ds.b    (64)*(ysize+20)
  21028.     END
  21029.